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