算法入门——递归(上)
分治(递归)
一、递归
定义:通俗来讲递归就是一个函数反复调用自身,每次把函数的参数进行压缩,直到这个参数可以很便捷的带入函数得出结果,然后将这个结果不断向上返回计算上层函数,就形成了递归;
递归函数两个重要概念
递归边界:分解的尽头
递归式(递归调用):分解问题的主要方法
下面给出例子来理解递归
二、n的阶乘
思路,把F(n)变为F(n-1),F(n-1)变为F(n-2)如此往复,直到F(0),而0的阶乘就是1所以可以作为一个结果进行返回
代码:
int F(int n){
if(n==0) return 1;//递归边界
else return F(n-1)*n;//递归式
}
从上述代码可以看出递归边界是递归函数返回的一个确定值,而递归式就是在不断压缩的递归函数。
三、斐波那契数列
如果在高等数学中了解过数列求和的问题,应该可以很好的理解递归的思想,数列求和或数列极限的习题中可能会给出一个后项与前项关系的等式,例如:f(n)=f(n-1)+f(n-2)这类,一般出现这种等式可以考虑递归思想,当然不是让你拿来解数学题,而是在编程题中可以轻易构造这么一个等式。
斐波那契数列:满足F(0)=1,F(1)=1,F(n)=F(n-1)+F(n-2) n>=2的数列
根据这个数列可以轻易得出一个递归函数
int F(int n){
if(n==0 || n==1) return 1;
else return F(n-1)+F(n-2);
}
四、总结
通过以上两个例子可以发现,解决递归问题的关键其实就是构造一个第n项与前项的函数关系式,而且这个函数必须是同一个函数,所以递归问题的难点就是在于怎么找到这个关系式。

浙公网安备 33010602011771号