有以下程序#include <stdio.h>void f(int x[], int n){ ?if ( n > 1)?? ?{ ? printf("%d,", x[0]);?? ? ? ?f(&x[1], n-1);? ? ? ?printf("%d,", x[0]);?? ?}? ?else? ? ?printf("%d,", x[0]);}main( ){ ? int z[3] = {4, 5, 6};? ? f(z, 3); ? ?? ? printf("\n");?}程序運行后的輸出結果是A) ?6,5,4,6,5,4,B) ?4,5,6,5,4,C) ?4,5,6,4,5,6,D) ?6,5,4,5,6,誰能解釋一下程序怎么運行的,我不能理解這里的遞歸
3 回答

三十二應遍塵剎
TA貢獻22條經驗 獲得超7個贊
void f(int x[], int n)
{ ?if ( n > 1)?
? ?{ ? printf("%d,", x[0]);?
? ? ? ?f(&x[1], n-1);
? ? ? ?printf("%d,", x[0]);?
? ?}
你應該是f(&x[1],n-1);這里的遞歸調用有疑惑吧,其實數組在內存中是以指針的形式存在的,int x[],數組名x代表了它的首地址,&是取地址符,&x[1],就是這個數組中第二個元素的地址,依次類推!如果這個你知道那也沒啥難得了吧,如果看不懂,請你看一看數組與指針的關系就行了

asd8532
TA貢獻143條經驗 獲得超187個贊
傳4,5,6和3進去輸出x[0]和x[0],兩個x[0]中間調用遞歸,所以兩個4中間有一些輸出輸出4.。。。。。4
傳5,6和2進去輸出x[0]和x[0],兩個x[0]中間調用遞歸,所以兩個5中間有一些輸出4 5.。。。5 4
6和1進去,直接輸出6然后退出4 5 6 5 4
- 3 回答
- 0 關注
- 2185 瀏覽
添加回答
舉報
0/150
提交
取消