1 1 2 3 5 8 13 21 34 ....前两个数之和等于第三个数---斐波那契数列
思想:Fib(n),当n<=2就为1,当n>2,Fib(n-1)+Fib(n-2)
如求第n个斐波那契数(这里采用递归)
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;
scanf("%d",&n);
ret=Fib(n);
printf("第%d个斐波那契数是:%d\n",n,ret);
return 0;
}
(这个代码采用递归效率低,下面用迭代循环的方法);
1 1 2 3 5 8 13 21 34...
开始a=1,b=1,a+b赋值给c,然后移动,a=1,b=2,a+b赋值给c
思想:把前两个数加起来存到另一个变量中
int Fib(int n)
{
int a=1;
int b=1;
int c=1;//当n=1或2时不会进入循环直接得出结果
while(n>2)
{
c=a+b;//开始a=1,b=1,c=a+b,循环一次ab依次向后移动
a=b;
b=c;
n--;
}
return c;
}
int main()
{
int n=0;
int ret=0;
scanf("%d",&n);
ret=Fib(n);
printf("第%d个斐波那契数是:%d\n",n,ret);
return 0;
}
青蛙跳台阶和这个差不多:
1 2 3 5 8 13 21
n个台阶,一次可以跳1个台阶,也可以一次跳两个
跳到第n个台阶,有多少种跳法
#include <stdio.h>
int jump(int n)
{
int a=1;
int b=1;
if(n<2)
{
return 1;
}
while(n--)
{
int temp=a+b;
a=b;
b=temp;
}
return a;
}
int main()
{
int n=0;
scanf("%d",&n);
int ret=jump(n);
printf("ways is %d\n",ret);
return 0;
}