亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么 輸出的是充第九天開始輸出的?還有那個 ‘n ’ 我不能理解

#include <stdio.h>

int getPeachNumber( int n)

{

? ? int num; ? ?//定義所剩桃子數

? ? if(n==10)

? ? {

? ? ? ?return 1; ? ? ? //遞歸結束條件

? ? }?

? ? else

? ? {

? ? ? ? num = (getPeachNumber(n+1)+1)*2; ? //這里是不應該用遞歸呢?

? ? ? ? printf("第%d天所剩桃子%d個\n", n, ?num); //天數,所剩桃子個數

? ? }

? ? return num;

}

int main()

{

? ? int num = getPeachNumber(1);

? ? printf("猴子第一天摘了:%d個桃子。\n", num);

? ? return 0;

}

中的 ?“ n ”實在是不知道為啥從第九天開始輸出的

正在回答

5 回答

你知道第十天的,當然最先算出的就是第九天的個數,遞歸就是逆推來計算的

1 回復 有任何疑惑可以回復我~
#1

取消不了 提問者

非常感謝!
2016-10-21 回復 有任何疑惑可以回復我~

我先把??getPeachNumbe 簡寫成 gN。這個n是天數的意思。

首先 它給了我們?int num = getPeachNumber(1);

gN(1);中n=1代入?(getPeachNumber(n+1)+1)*2;

就會有 ?(gN(1+1)+1)*2 ? ? ?這時gN(1+1)=gN(2)對吧?可是gN(2)等于多少我們又不知道,所以重新代入??(getPeachNumber(n+1)+1)*2; ? 就會出現 ?(gN(2+1)+1)*2 ,這時又出現了 gN(3) 我們還是不知道,就繼續.....(以此類推) 到后面就有當 n==10時 return=1 就是說gN(10)=1 。這時g(10)等于多少我們知道,就代入gN(9)的式子里面得出桃子數,然后算上去。因為最先得出第九天的桃子所以程序先輸出。

? n=1時 (gN(1+1)+1)*2 ? ——》里面gN(2)的值不知道

? n=2 ? ? (gN(2+1)+1)*2 ——》gN(3)的值不知道

? ? n=3 ?(gN(3+1)+1)*2 ——》gN(4)不知道

? ? ?n=4?(gN(4+1)+1)*2 ——》gN(5)不知道

? ? n=5? (gN(5+1)+1)*2 ——》gN(6)不知道

? ? ??n=6(gN(6+1)+1)*2 ——》gN(7)不知道

? ? ? n=7(gN(7+1)+1)*2 ——》gN(8)不知道

? ? ?n=8?(gN(8+1)+1)*2 ——》gN(9)不知道

? ? ? n=9(gN(9+1)+1)*2 ——》gN(10)?知道

? ? ? ? ? n==10 ?則 return 1;所以gN(10)=1.

? ? ? ?現在開始往回帶,因為gN(10)=1代入gN(9)能登出gN(9)等于多少,接著就gN(8) 推上去.....

? ? ? ?n=9 ? (gN(9+1)+1)*2 ——》gN(9) ?= (1+1)*2=4 ? 因為已經得出來了這里就先輸出第九天的桃子數了。

? ? ? n=8 ? ?(gN(8+1)+1)*2 ——》gN(8) ?= (4+1)*2=10

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 。。。。推下出。

? ? ? ?打的好累,但希望能幫到你 :)

0 回復 有任何疑惑可以回復我~

{ 【((g(10)+1)*2+1】*2+1)*2.........+1 ? ?}*2 ? ?來分析這個式子 ? 注意這句話 ?每一次進行一次 ?+1*2就代表遞歸了一次 ?將g(1)進行遞歸后展開得到的就是這個式子 ? ? 如果想的不明白就倒著想 ? 第10天蘋果是1個 ? 第九天是(1+1)*4=4 ?。 ? ?如果遞歸沒有完成 ?是不會進行計算打印的 。當開始計算時 是先計算最里面的式子,而g(10)+1)*2 ? 對應著g(9) ? 就是第九天。這就是我的淺見,如有不恰當之處 ?還請斧正

0 回復 有任何疑惑可以回復我~

當n=10,滿足if(n==10),所以直接return 1了,程序并不會走else里面的內容。n=1時,沒有滿足遞歸結束的條件,n會一直遞增下去,直到n=10,所以n=1時并不會執行下面的printf()打印語句,而是繼續執行下去。當執行到n=10會逆推回去,由于if(n==10)里面的代碼塊是沒有printf()打印語句的,所以從9開始打印,不過你也可以加上去,然后就可以看到第十天的效果了

2 回復 有任何疑惑可以回復我~

應該是你的if else使用不當

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么 輸出的是充第九天開始輸出的?還有那個 ‘n ’ 我不能理解

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號