递归
递归的3个条件:
- 一个问题的解可以分解为几个子问题的解。
- 这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样。
- 存在递归终止条件。
其实在代码当中只需要2个return
- 终止条件返回
- 返回子问题(F(n)的计算方式)。
示例:
斐波那契数列 0、1、1、2、3、5、8、13、21、34。。。。。。
数学上的递推方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
要求:求第n个数是多少?
分析:假设求第6个数
0 | 1 | 1 | 2 | 3 | 5 | 8 |
0 | 1 |
| n-2 | n-1 | n |
|
- 终止条件返回F(0)=0,F(1)=1
if(n == 0){return 0;}
if(n == 1){return 1;}
- 返回子问题(F(n)的计算方式)
return F(n-1) + F(n-2);
- 加校验
n ≥ 2,n ∈ N*
总体代码:
//假设方法名为calc
int calc(int n){
//此处需要校验n ≥ 2,n ∈ N*
//终止条件
if(n == 0){return 0;}
if(n == 1){return 1;}
//返回n的计算方式
return calc(n-2) + calc(n-1);
}