以相反顺序打印阵列

时间:2017-10-19 02:26:25

标签: c arrays recursion

我有以下源代码,您将在下面找到它。我很难理解如何在trimesh_clustering.cpp函数中交换最后两行,并打印出与数组相反的顺序。

有问题的行:

printArray

有人可以向我解释这个。

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

1 个答案:

答案 0 :(得分:2)

让我们一起来看看。

您从printArray致电mainn等于7.

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

在接下来的通话中,printArray61进行比较:它们不相等,因此会打印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] );
      ...

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