递归例子------连续更新ing
一.开篇–三角数字
问题提出
数字序列 1,3,6,10,15,21…有一种特殊的规律。这个数列的第n项是第n-1项+n得到的,如第2项等于2+1,第三项等于3+3,以此类推。
假设要在这个数列中找到第n项的值,该怎么计算?
解决
- 首先,如果要找到第n项,如果知道第n-1项就好了;如果要找到第n-1项,如果知道第n-2项就好了;如果要找到第n-2项,如果知道第n-3项就好了…
以此类推,如果要找到第二项,知道第一项就好了。那么告诉你第一项就为1,再倒退回去,问题就迎刃而解了。 - 从数学归纳法的角度来看,求第n项的值看作一个函数f(n),那么根据规律很容易得到f(n)=f(n-1)+n;
- 从问题的分解来看,我们每求f(n),都要求f(n-1),如图:对于每一个子问题,都是f(n)=f(n-1)+n的规律
- 综上所述,此问题用递归来解决。
问题解决的关键代码
public int F(int n){
if(n==1) //终止条件
return 1;
else
return F(n-1);
}
和这个例子相似的是阶乘的运算,只不过加法变成了乘法。