递归的思想
具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归(内存溢出)的情况了。
递归的注意事项
1、递归一定要有出口,不然会导致内存溢出
2、递归次数不宜过多,不然会导致内存溢出
递归的算法格式
func( mode){
if(endCondition){ //递归出口
end;
}else{
func(mode_small) //调用本身,递归
}
}
递归适用于的几种题型
求一个数的阶乘,阶乘的递推公式为:factorial(n)=n*factorial(n-1),其中n为非负整数,且0!=1,1!=1
public static long factorial(int n) throws Exception {
if (n < 0)
throw new Exception("参数不能为负!");
else if (n == 1 || n == 0)
return 1;
else
return n * factorial(n - 1);
}
斐波那契数列
斐波那契数列的递推公式:Fib(n)=Fib(n-1)+Fib(n-2),指的是如下所示的数列:
1、1、2、3、5、8、13、21…`
public static int fib(int n) throws Exception {
if (n < 0)
throw new Exception("参数不能为负!");
else if (n == 0 || n == 1)
return n;
else
return fib(n - 1) + fib(n - 2);
}
递归是一种重复调用自身的算法,由于重复调用会导致内存过高,所以除开一些特殊的题型以外,可以不采用递归以免效率低
本文介绍了递归算法的基本思想,强调了递归过程中设置正确终止条件的重要性,并通过阶乘和斐波那契数列两个经典案例展示了递归算法的应用。
1373

被折叠的 条评论
为什么被折叠?



