gpt4 book ai didi

c - 以相反顺序打印数组

转载 作者:行者123 更新时间:2023-11-30 20:10:15 24 4
gpt4 key购买 nike

我有以下源代码,您可以在下面找到。我很难理解如何将 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com