1.
青蛙跳台阶问题:
有一个台阶有N阶,青蛙可以一次跳一阶,也可以一次跳两阶,那么跳到第N阶
总共有多少种跳法?
假设跳到第N阶的跳法为f(N)
那么可由规律得到:
f(N) = f(N - 1) + f(N - 2);
…
f(1)=1
f(2)=2
这与求斐波那契数列相似,这样可以套用求斐波那契数的代码
而要注意的是青蛙跳台阶问题里,f(1)=1,f(2)=2;
要将部分数值改变,才可套用此代码
long long Fibnacci(size_t N)
{
if (N < 2)
{
return N;
}
int fib0 = 0, fib1 = 1, fib2;
while (N>=2)
{
fib2 = fib0 + fib1;
fib0 = fib1;
fib1 = fib2;
N--;
}
return fib2;
}
int main()
{
printf("请输入一个数:");
int n = 0;
scanf("%d", &n);
int k=Fibnacci(n);
printf("%d", k);
return 0;
}
2.
变形:
青蛙变态跳台阶问题:
青蛙一次可以跳1阶,也可以跳2阶…… 也可以跳N阶,那么
跳到第N阶总共有多少种跳法?
假设跳到第N阶的跳法为f(n)
f(n) = f(n - 1) + f(n - 2) + f(n - 3) + ... + f(2) + f(1)
f(n - 1) = (n - 2) + f(n - 3) + ... + f(2) + f(1)
f(n) - f(n - 1) = f(n - 1);
f(n) = 2 * f(n - 1);
f(n)=2^(n-1)