為什么 輸出的是充第九天開始輸出的?還有那個 ‘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 ”實在是不知道為啥從第九天開始輸出的
2016-08-24
你知道第十天的,當然最先算出的就是第九天的個數,遞歸就是逆推來計算的
2016-10-05
我先把??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
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 。。。。推下出。
? ? ? ?打的好累,但希望能幫到你 :)
2016-09-04
{ 【((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) ? 就是第九天。這就是我的淺見,如有不恰當之處 ?還請斧正
2016-08-24
當n=10,滿足if(n==10),所以直接return 1了,程序并不會走else里面的內容。n=1時,沒有滿足遞歸結束的條件,n會一直遞增下去,直到n=10,所以n=1時并不會執行下面的printf()打印語句,而是繼續執行下去。當執行到n=10會逆推回去,由于if(n==10)里面的代碼塊是沒有printf()打印語句的,所以從9開始打印,不過你也可以加上去,然后就可以看到第十天的效果了
2016-08-24
應該是你的if else使用不當