1樓:手機使用者
2,返回值是1;
所以當k>2時,函式會遞迴呼叫;
如果實在不能理解,可以進行有效**替換來看一下遞迴呼叫的過程;
首先fun(6,&x);
等價於:
fun(5,&x);
fun(4,&x);
x=a+b;
然後進一步替換fun(5,&x);
又等價於:
fun(4,&x);
x=a+b;
繼續:fun(3,&x);
x=a+b;
}fun(4,&x);
x=a+b;
繼續:fun(2,&b);
x=a+b; //表示式中的x為fun(3,*p)的*p值+fun(2,*p)的*p值 為3
}//下面一次呼叫返回,這就是遞迴執行的過程,不一一代入了,可以自己代入看看結果是8
fun(3,&x);
x=a+b;
}fun(4,&x);
x=a+b;
以上是從函式呼叫過程分析的結果,另外還可以這樣理解:
首先理解一下fun(k,*p)這個函式的內容;
不難發現,fun(1,*p)和fun(2,*p)執行後*p =1;
而如果k值不為1或者2時,函式會一直調到k =1 或者k=2位置才會返回;
既然是k=6 ,可以簡單推一下;
fun(3,p3)時,
函式呼叫變成了
fun(2,p1)
fun(1,p2)
p3= p1+p2 =2
fun(4,p4)時,
函式呼叫變成了
fun(3,p3)
fun(2,p2)
p4=p2+p3 = 1+2 =3
fun(5,p5)時,
函式呼叫變成了
fun(4,p4)
fun(3,p3)
p5=p3+p4= 2+3 =5
fun(6,p6)時,
函式呼叫變成了
fun(5,p5)
fun(4,p4)
p6=p4+p5= 3+5=8
……總結可以發現這個函式實際實現了一個求佇列中第k個元素值的作用。
而這個佇列是1 1 2 3 …… n[k-2] n[k-1] n[k]= n[k-1]+n[k-2];
都是我自己敲了呀,累死我了~~~
2樓:匿名使用者
int argc,char *argv
C語言程式填空,C語言程式填空題
有1個地方填錯了 第一題 第一空 num k n 2 第二空 for k 0 k 去掉第二題 第一空 a i 2 0 第二空 s a i c語言程式填空題 include include int isprime int num 1判斷num是否為質數 for int i 2 i格外面已經有分號,格仔...
C語言填空
答案如下 3d表示從標準輸入裝置讀取3位十進位制數字,所以x 123 空格是預設的資料分隔符,所以y只能讀取到空格,以後的都被丟棄,因此y 45,又因為y是浮點數 float c評語在格式化輸出時,根據資料來決定顯示精度,但float最多顯示6位小數,所以最後顯示y是45.0。scanf 3d f ...
c語言問題,C語言問題,謝謝!!!
這樣簡單的 復問題,按照制書上的舉例。套出一bai個來就行了,就是du乙個迴圈語句,內 zhi加乙個判斷奇偶語句dao就行了吧!源程式如下 include int main printf 偶數和為 d n奇數和為 d n o,j return 0 用 for迴圈抄 include int main ...