为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 num = (getPeachNumber(n + 1) + 1) * ??

  num = (getPeachNumber(n + 1) + 1) * 

正在回答

6 回答

还有第二行代码:int getPeachNumber(n)是错误的。虽然在最后可以算出正确结果,但有错误提示。

(n)没有定义数据类型,因为是天数,所以用整型,(int n)

0 回复 有任何疑惑可以回复我~

根据题意做下假设,就拿第5、6天来说明。

假设第5天桃子数为a,第6天桃子数为b,得到下面公式:

a/2-1=b  //可以理解为这个公式用在递推

那么当计算到第10天,结果为1,反回值时就需要变换公式了

a-1*2=b*2  //等号两边乘以2

a=b*2+1*2 //把1*2移到等号右边

a=(b+1)*2  //把2提取出来

写成函数代码就是:(getPeachNumbern(n)+1)*2

又因为递推时,getPeachNumber(0)是没有意义,保证n最小值为1,就写成n+1

最后结果:(getPeachNumber(n+1)+1)*2

0 回复 有任何疑惑可以回复我~

因为现在告诉你的是第十天的桃子数,而main函数中是求总桃子数,也就是第一天摘的桃子数,那怎么办呢?那么递归就是通过不断调用自身来获取已知的值,既然第一天桃子数不知道,那就看看第二天的桃子数,而第一天的桃子数等于第二天的桃子数+1再*2,那第二天的桃子数又不知道,又调用自身的函数,再往前推,一直到第十天,终于知道等于一个了,计算机这样不断累加回去得出最后的答案。

2 回复 有任何疑惑可以回复我~

在这个程序中,初始设定只知道getpeachnumber(10)=1,要先推出(getpeachnumber(9+1)+1)*2=num(第九天的情况)才能继续往下推。



3 回复 有任何疑惑可以回复我~

可以理解为函数有f(n+1)=f(n)-(f(n)/2+1),即第n+1天所剩桃子数,换过来f(n)=2*(f(n+1)+1),即第n天所剩桃子数,f(n)=num

6 回复 有任何疑惑可以回复我~

num = (getPeachNumber(n+1)+1)*2;

应为递归 最后一次为第十天剩下1个桃子,由此往前推,剩下的1桃子个加1乘以2得到前一天的(由后向前从第十天-第九天----第一天)

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么 num = (getPeachNumber(n + 1) + 1) * ??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信