- 递归算法,就是按照某一包含有限步数的法则或公式对一个或多个前面的元素进行运算,以确定一系列元素(如数或函数)的方法。它的基本思想是把一个大问题拆分成数个小问题来逐个解决。在程序语言中表现为函数自己调用自己。
- 斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、…前两项相加第三项,等于根据它的规律,可以得到它的数学公式:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3)
C语言递归实现求第n个斐波那契数:
#include <stdio.h>
int Fib(int N)
{
//先设定结束递归的条件,由于数列的前2项都是1,故当传入的参数N小于3时,返回一个1。
if (N <= 2)
return 1;
//如果传入的数大于等于3时,根据数学公式,通过递归调用,将当前的项转化为前两项的和。
return Fib(N - 1) + Fib(N - 2);
}
int main()
{
int n;
printf("请输入一个数: \n");
scanf("%d",&n);
printf("第%d个斐波那契数为%d\n",n,Fib(n));
return 0;
}
运行结果:
如果将传入的数值加大,比如输入40:
会发现结果并没有立即显示,程序会开始“思考“,等待了10S左右后才檀树弹出结果:
这是由于要计算的数字很大,由于使用了递归,编译器要不断的重复计算,导致计算所需时间就变得很长,这也反映了递归算法的一个缺点:时间和空间的消耗大,计算效率低。所以,在实际应用中不推荐使用递归。