每次共有n个台阶,每次可以跳1法个台阶或2个台阶,计算有多少种跳完的方法
若n==1,则方法数Fib(1)==1
若n==2,则方法数Fib(2)==2
若n==3,当第一步只跳1个台阶时,则剩下2个台阶,共有Fib(2)种方法跳完;当第一步跳2个台阶时,则剩下一个台阶,共有Fib(1)种方法跳完,即Fib(3)==Fib(2)+Fib(1)
同理,若n==4,Fib(4)==Fib(3)+Fib(2)
……
可得,Fib(n)==Fib(n-1)+Fib(n-2)
1.递归
int Fib(int n)
{
if (n == 1||n==2)
{
return n;
}
int i = 0;
for (i = 3;i<=n;++i)
{
return Fib(n - 1) + Fib(n - 2);
}
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = Fib(n);
printf("%d\n", ret);
return 0;
}
2.迭代
int Fib(int n)
{
int n1 = 1;//共有1个台阶时的方法数
int n2 = 2;//共有2个台阶时的方法数
int ret = 0;
if (n == 1 || n == 2)
return n;
else
{
int i = 0;
for (i = 3;i <= n;i++)
{
ret = n1 + n2;
n1 = n2;
n2 = ret;
}
return ret;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
腿长版:一次可以跳n个台阶
若n==1,则方法数Fib(1)==1
若n==2,则方法数Fib(2)==2
若n==3,当第一步只跳1个台阶时,则剩下2个台阶,共有Fib(2)种方法跳完;当第一步跳2个台阶时,则剩下1个台阶,共有Fib(1)种方法跳完,即Fib(3)==Fib(2)+Fib(1)
若n==4,当第一步只跳1个台阶时,则剩下3个台阶,共有Fib(3)种方法跳完;
当第一步跳2个台阶时,则剩下2个台阶,共有Fib(2)种方法跳完;
当第一步跳3个台阶时,则剩下1个台阶,共有Fib(1)种方法跳完;
当第一步跳4个台阶时,则剩下0个台阶,共有Fib(0)种方法跳完;
即Fib(4)==Fib(3)+Fib(2)+Fib(1)==2*Fib(3)
……
可得,Fib(n)==2*Fib(n-1)
int Fib(int n)
{
if (n == 1 || n == 2)
return n;
else
return 2 * Fib(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}