递归的思想
1、一个问题可以拆分成若干个数据规模更小的问题
2、这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样
3、有递归终止条件,不能无限循环I
递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了
递归的三个条件:
1、边界条件
2、递归前进段
3、递归返回段
当边界条件不满足时,递归前进;
当边界条件满足时,递归返回。
例如:
计算5的阶乘此题中,按照递归的三个条件来分析:
(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;
(2)递归前进段:当前的参数不等于1的时候,继续调用自身;
(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是
即5(5-1),即n ( n-1)
public int fun_1(int n){
if(n<=2)
return n;
else {
return n*fun_1(n-1);
}
}
斐波那契数列
1,1,2,3,5,8,13,21,34,55,89...
递归实现
public long fun(long n){
if(n<=1) return n;
return fun(n-1) + fun(n-2);
}
循环实现
public int fun(int n){
if(n<=1) return n;
int first = 0;
int second =1;
for (int i = 0; i < n-1 ; i++) {
int sum = first+second;
first = second;
second = sum;
}
return second;
}