递归
____函数自己调用自己,又可以理解为自己的事情自己做。
如果觉得难以理解,可以把理解成这个函数调用了一个函数,只是这个函数和自己长得一模一样。
---------------------------------------------------------------------------------------
拿一对刚出生的小兔子编故事。
假设,一对刚出生的小兔子,第一个月没有繁殖能力,两个月后生下一对兔子。
假设所有的兔子都不死,那么10月后有多少对兔子?
所经历的月数 1 2 3 4 5 6 7 8 9 10
兔子对数 1 1 2 3 5 8 13 21 34 55
---------------------------------------------------------------------------------------
#include <stdio.h>
int FBArray(int i)
{//FBArray(1) FBArray(2) FBArray(3) FBArray(4) FBArray(5)
// 1 1 2 3 5
if(i < 2)
{
return (i == 0)? 0 : 1;
}
return FBArray(i-1) + FBArray(i-2);
}
int main()
{
printf("\n");
int i;
for(i = 1 ; i <= 40 ; i++)
{//打印40个月兔子的数量变化
printf("%d\n",FBArray(i));
}
printf("\n");
return 0;
}
如果考虑算法复杂度的的话,还是以下代码更优
//斐波那契数列查找算法,求斐波那契数列第n项
#include<stdio.h>
unsigned long long FBArray(unsigned int n);
int main(void)
{
int n;
scanf("%d" , &n);
printf("%llu\n" , FBArray(n));
return 0;
}
unsigned long long FBArray(unsigned int n)
{
int i , fibone , fibtwo , fibthree;
int fi[2] = {0 , 1};
fibone = 0;
fibtwo = 1;
if(n < 2)
{
return fi[n];
}
else
{
for(i = 2;i <= n;i++)
{
fibthree = fibone + fibtwo;
fibtwo = fibone;
fibone = fibthree;
}
return fibthree;
}
}
原文:https://www.cnblogs.com/baixiaoxiao/p/10573119.html