递归与迭代:求第n个斐波那契数(不考虑溢出)

时间:2023-01-21 17:58:03

斐波那契数列:前两个数之和等于第三个数(如1 1 2 3 5 8 13 21 34 55 ......)

描述第n个斐波那契数列:

由图

Fib


n<=2

1



n>2

Fib(n-1)+Fib(n-2)

递归:

#include<stdio.h>
int Fib(int n)
{
if(n<=2)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
int main()
{
int n=0;
int ret=0;
printf("请输入:");
scanf("%d",&n);
//TDD-测试驱动开发
ret=Fib(n);
printf("第%d的数的斐波那契数是:%d\n",n,ret);
return 0;
}

主要部分:

if(n<=2)
return 1;
else
return Fib(n-1)+Fib(n-2);

迭代:

#include <stdio.h>
int Fib(int n)
{
int a,b,c;
a=b=c=1;
while(n>2)
{
c=a+b;
a=b;
b=c;
n--;
}
return c;
}
int main()
{
int n=0;
int ret=0;
printf("请输入:");
scanf("%d",&n);
//TDD-测试驱动开发
ret=Fib(n);
printf("第%d的数的斐波那契数是:%d\n",n,ret);
return 0;
}

主要部分:

a=b=c=1;
while(n>2)
{
c=a+b;
a=b;
b=c;
n--;
}
return c;

a的值改成刚才的b,b的值改成刚才的c

n--:结束循环

(具体细节:”​​函数​​“)