c语言:递归算法
递归函数最通俗的讲法就是先传递,在一次一次的传递后再归来。
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,
它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,
大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小.
递归算法有两个必要条件:
1.存在一个限制条件,使得满足这个条件时,递归能够主动不再继续进行。
2.在每次递归调用后,都必须更接近这个限制条件。
递归函数的应用:斐波那契数列
斐波那契数列的是这样一个数列:1、1、2、3、5、8、13、21、34…,即第一项 f(1) = 1,第二项 f(2) = 1…,第 n 项目为 f(n) = f(n-1) + f(n-2)。求第 n 项的值是多少。
首先,我们要明白用递归写这个函数的主要功能是找到第n项的值是多少?
我们观察数列,前两项为1,第三项为前两项的和,第四项等于第二 三项的和,因此我们可以得出一个结论,第n项等于第(n-1)与第(n-2)项的和!
同时,我们应该注意到两个必要条件,存在一个限制条件,每次递归后更接近该递归函数!(每次运算都要在n的基础上-1,知道n=1或者n=2时停止!
因此我们可以写出以下代码:
int finbo(int n) { if(n==1||n==2) { return 1; } else { return finbo(n-1)+finbo(n-2); } }
这就是一个具有递归作用的函数,我们可以看出写递归函数的主要是找到等价关系式。
接下来我们用计算阶乘来看看使用递归和不使用递归的区别
1.非递归算法
int jie_cheng(int x) { int ret = 1; for(int i = 1;i<=x;i++) { ret*=i; } return ret; }
2.递归算法
int jie_cheng(int x) { if(x==1) { return 1; } else return x*jie_cheng(x-1); }