青蛙跳台阶问题本质上是一个斐波那契数列问题,笔者在写程序时遇到了一个可能别人没遇过的问题。青蛙跳到1只有一种方式,跳到2则有两种方式:分两步跳(1+1)与分一步跳(2)。假设青蛙要跳三级台阶,第三步的前一步如果跳到1级,那么第二步一定跳2级;前一步如果跳到2级,则下一步跳到3级——也就是说,第三级的方法总数等于跳到第一级的加上跳到第二级的。笔者第一次想的是这二者都加上1,也就是说Fn=F(n-1)+1+F(n-2)+1,然而问的是方法种类,可能是笔者的惯性思维,默认想成步数了。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int Jump(int n)
{
int a = 1;
int b = 2;
int c = 0;
if (n==1)
{
return 1;
}
else if (n==2)
{
return 2;
}
else
{
while (n > 2)
{
c = a +b;
a = b;
b = c;
n--;
}
return c;
}
}
int Jump2(int n)
{
if (n==1)
{
return 1;
}
else if (n == 2)
{
return 2;
}
else
{
return (Jump2(n - 1) + Jump2(n - 2));
}
}
int main()
{
//已知青蛙每次只能跳一个台阶或者两个台阶,问跳到第n个台阶有几种方式
int n = 0;
scanf("%d", &n);
int ret = 0;
ret = Jump(n);
printf("ret=%d\n", ret);
ret = Jump2(n);
printf("ret=%d\n", ret);
return 0;
}