我有以下源代码,您可以在下面找到。我很难理解如何将 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
调用 printArray
,n
等于 7。
printArray
函数将 7
与 1
进行比较;它们不相等,因此它会打印 arr[6]
,然后调用 printArray( 6, arr )
。
在下一次调用中,printArray
会将 6
与 1
进行比较:它们不相等,因此会打印 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/