num = (getPeachNumber(n+1)+1)*2; 是什么意思?
#include <stdio.h>
int getPeachNumber(int n)
{
? ? int num;? ? //定義所剩桃子數(shù)
? ? if(n==10)
? ? {
? ? ? ? return 1;? ? ? ?//遞歸結(jié)束條件
? ? }?
? ? else
? ? {
? ? ? ??
? ? ? ? printf("第%d天所剩桃子%d個(gè)\n",? ,? ); //天數(shù),所剩桃子個(gè)數(shù)
? ? }num = (getPeachNumber(n+1)+1)*2;? ?//? ? ???????????????????
? ? return num;
}
int main()
{
? ? int num = getPeachNumber(1);
? ? printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
? ? return 0;
}
2024-08-23
num = (getPeachNumber(n+1)+1)*2 的意思理解
最里面的小括號的“(n+1)”為遞歸加,即每次遞歸n的值+1,就是天數(shù),為了獲取第10天已知的剩余桃子數(shù)量“1”;
先算算每天沒有吃桃子前剩余的桃子數(shù)量
第10天,剩余1個(gè)桃子;
第9天,剩余(1+1)*2=4個(gè)桃子;
第8天,剩余(4+1)*2=10個(gè)桃子;
第7天,剩余(10+1)*2=22個(gè)桃子;
第6天,剩余(22+1)*2=46個(gè)桃子;
....
根據(jù)條件,第10天只剩余1個(gè)桃子可以計(jì)算出第9天的桃子,
所以num = (getPeachNumber(n+1)+1)*2,使用的是“(n+1)”,是為了獲取遞歸結(jié)束條件返回的值“return 1;”就是數(shù)值1,
所以第9天的桃子數(shù)可以計(jì)算出來sum=?(getPeachNumber(9+1)+1)*2=(1+1)*2=4;
所以第8天的桃子數(shù)要根據(jù)第9天計(jì)算的數(shù)值來計(jì)算,可以計(jì)算出來sum=?(getPeachNumber(8+1)+1)*2=(4+1)*2=10;
所以第7天的桃子數(shù)要根據(jù)第8天計(jì)算的數(shù)值來計(jì)算,可以計(jì)算出來sum=?(getPeachNumber(7+1)+1)*2=(10+1)*2=22;
.......
所以該遞歸的計(jì)算過程全部過程應(yīng)該是:
n=10時(shí), num=1;
n=9時(shí), num=(1+1)*2;
n=8時(shí), num=((1+1)*2+1)*2;
n=7時(shí), num=(((1+1)*2+1)*2+1)*2;
...
n=1時(shí), num=(((((((((1+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2+1)*2;
2023-08-22
前一天的桃子樹是之后一天的兩倍+1