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