斐波那契数列
斐波那契数列(Fibonacci sequence),指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
计算斐波那契数列常用两种方法,递归与非递归(迭代法),以1做第一项,则前两项值均为1,从第三项开始,每项的值为前两项之和。
1.递归法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
#include<assert.h>
int Fib(int n)
{//n小于等于2时,直接返回1
if (n <= 2)
return 1;
//n大于2,递归调用,直到n为1,再逐层返回
else
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
printf("%d\n",Fib(8));
system("pause");
return 0;
}
采用递归的方法,代码简洁,但因递归需要大量函数调用,需要大量的形成和释放栈帧,有以下缺点
时间上:程序效率低下
空间上:可能发生栈溢出
如图
2.迭代法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<windows.h>
int Fib(int n)
{
int first = 1;
int second = 1;
int third = 1;
while (n>2) //n小于等于2时,不执行循环,直接返回c
{
third = first + second;
first = second;
second = third;
n--;
}
return third;
}
int main()
{
printf("%d\n", Fib(8));
system("pause");
return 0;
}
迭代方法没有其他函数调用,只在一个函数内实现,效率较高。