大佬們,我想知道這個代碼的運算過程
#include <stdio.h>
int getPeachNumber(n)
{
? ? int num; ? ?//定義所剩桃子數(shù)
? ? if(n==10)
? ? {
? ? ? ?return 1; ? ? ? //遞歸結(jié)束條件
? ? }?
? ? else
? ? {
? ? ? ? num = ?(getPeachNumber(n+1)+1)*2; ? ?//這里是不應(yīng)該用遞歸呢?
? ? ? ? printf("第%d天所剩桃子%d個\n", n, num); //天數(shù),所剩桃子個數(shù)
? ? }
? ? return num;
}
int main()
{
? ? int num = getPeachNumber(1);
? ? printf("猴子第一天摘了:%d個桃子。\n", num);
? ? return 0;
}
2020-02-19
其實就是一道應(yīng)用題,每天的桃子是后一天剩下桃子量的兩倍還多一個,所以要想直到當天桃子量必須先知道后一天的桃子量 這也是為什么這個代碼是倒著算的?
并且已知到第十天的時候只剩一個桃子 所以只有算到第十天的時候才能開始解
在算到最后一步,也就是第十天的時候,之前每一天的桃子量都不知道,而是把計算下一天桃子量的函數(shù)當作前一個函數(shù)的變量
我們從頭開始
第一天的桃子量是第二天剩下桃子還多一個的兩倍 此時n=1
即第一天的桃子量num={[第二天的桃子量getPeachnumber(n+1=2)]+1(多一個)}*2 的兩倍
然后對于第二天 來說 此時 n=2 num={[第三天的桃子量getPeachnumber(n+1=3)]+1(多一個)}*2 的兩倍
在第十層之前每層都是這樣循環(huán)的 但是在算到第十層之前都沒有確切的數(shù)字出來
也就是算第九天的桃子量時 n=9 num={[第十天的桃子量getPeachnumber(n+1=10)]+1(多一個)}*2 的兩倍
由n==10, return 1可知 對于函數(shù)getPeachnumber(n)當自變量等于10時 函數(shù)值等于1,即第十條桃子量為1
然后第九天就是num={[1]+1}*2=4
第八條是num={[4]+1}*2=10……以此類推 就出結(jié)果了
你可以想象成俄羅斯套娃?
不知道有沒有幫到你更好的理解