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

关于(n+1)问题

为什么是getPeachNumber(n+1)不是getPeachNumber (n)

正在回答

4 回答

有点明白额

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

写的很详细,看懂了,谢了

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

首先getPeachNumber(int n)就是要得到第n天剩下的桃子个数,现在就是已知getPeachNumber(10) ,要得到getPeachNumber(1)。并且知道:第二天剩桃个数=前一天剩桃个数的一半-1;那么getPeachNumber(2)=getPeachNumber(1)/2-1,同理getPeachNumber(3)=getPeachNumber(2)/2-1;依此类推,得到getPeachNumber(10)=getPeachNumber(9)/2-1。由getPeachNumber(10)有了具体值,得到终止,反推得到getPeachNumber(9),然后得到getPeachNumber(8),最终得到getPeachNumber(1)。

 这下就知道,递归关系和终止条件,就是关键。在getPeachNumber(int n)中,if终止,else里面递归。

现在我们用n表示天数,getPeachNumber(int n)表示第n天剩桃个数,以上关系就可以表达为:getPeachNumber(n+1)=getPeachNumber(n)/2-1 ;即getPeachNumber(n)=(getPeachNumber(n+1)+1)*2;(这就是递归条件,让第n天所剩桃与第n+1天所剩桃产生关系)。

在getPeachNumber(int n)函数中,定义num为第n天的剩桃数,所以num=getPeachNumber(n),也就有num=(getPeachNumber(n+1)+1)*2 (也就是这个关系式将第n天与第n+1天联系起来了)。

写的有点啰嗦,不知道你明白没有。举个例(不准确但我觉得可以帮助理解):10个人排成一列,每人一个号码,且后一个人的号码是前一个人的号码的一半减一(这是递归关系)。现在只有最后一个人知道自己的号码是1(这是终止条件),那么第一个人的号码是多少呢?是不是第一个人去问第二个人,第二人问第三人,。。。最后第九人问第十人,然后的第十这个人说自己是1,然后第九人就知道自己4(这里递归关系算出来),。。。。最后第一个人得到自己的号码。


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

因为是递归,如果你写‘getPeachNumber (n)’则函数只是重复地赋值,变量不发生改变。而‘getPeachNumber(n+1)’则是每次函数复调时赋值,变量都加上‘1’;

也可以简单地拆分为‘n+1’和‘n’的区别。这种函数的复调都是解有序数列问题的;比如:第1人有 1 块钱,第2人比第 1 人多 1 块钱,第3人比第 2 ~~~以此类推,问第 100人有多少钱。

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

诺丁汉 提问者

还是不太懂,n本身就是一个变量,不用自增1吧
2017-01-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C语言入门
  • 参与学习       926016    人
  • 解答问题       20793    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

关于(n+1)问题

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