c - 以相反顺序打印数组

标签 c arrays recursion

我有以下源代码,您可以在下面找到。我很难理解如何将 printArray 函数中的最后两行与打印数组的相反顺序互换。

有问题的行:

printf("%d", arr[n-1]);
printArray(n-1, arr);

有人可以向我解释一下吗?

#include <stdio.h>

void printArray(int n, int arr[]);

int main(void){

    int array[7]= {1,2,3,4,5,6,7}, n=7;
    printArray(n, x);

    return 0;
}

void printArray(int n, int arr[]){

   if( n==1){
      printf("%d", arr[0])
   }
   else {
      printf("%d", arr[n-1]);
      printArray(n-1, arr);
   }
}

最佳答案

让我们来看看它。

您从 main 调用 printArrayn 等于 7。

printArray 函数将 71 进行比较;它们不相等,因此它会打印 arr[6],然后调用 printArray( 6, arr )

在下一次调用中,printArray 会将 61 进行比较:它们不相等,因此会打印 arr[5 ],然后调用 printArray( 5, arr )

等等。压缩它,我们得到:

printArray( 5, array ):
  printf( "%d", arr[4] );
  printArray( 4, arr ):
    printf( "%d", arr[3] );
    printArray( 3, arr ):
      printf( "%d", arr[2] );
      printArray( 2, arr ):
        ...

等等。最终,当n为1时,printArray打印arr[0]并且我们一路返回调用链。因此,数组的元素以相反的顺序打印出来(数组本身不受影响)。

如果你颠倒调用的顺序

printArray( n-1, arr );
printf( "%d", arr[n-1] );

然后调用链如下所示:

printArray( 5, arr ):
  printArray( 4, arr ):
    printArray( 3, arr ):
      printArray( 2, arr ):
        printArray( 1, arr ):
          printf( "%d", array[0] );
        printf( "%d", array[1] );
      printf( "%d", array[2] );
      ...

等等。这次我们按正常顺序打印出数组。

关于c - 以相反顺序打印数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46821990/

相关文章:

c - getrusage 是如何工作的以及 usage 结构内部到底是什么?

c - 如何在 Linux 中使用 gethostbyname_r

c++ - 在C++中将数字添加到数组变量

javascript - 为什么 forEach 函数不让我返回一个对象,甚至只是将它从函数中传递出去?

c++ - 带负数的递归最小值

javascript - 我需要将一组文件从原始位置复制到新文件夹

javascript - 将对象数组从 JavaScript 转换为 COM 变体数组

c++ - 用递归计算函数 F(n)

algorithm - 计算递归关系 T(n)=T(n/log n) + Θ(1)

c - sizeof union 总是其中最大数据类型的 sizeof 吗?