青蛙跳台阶问题
0.题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
1.解题思路
首先,我们可以将问题简单化。假如只有1
级台阶的话,肯定只有一种跳法;假如有两级台阶的话,就会有两种跳法,一种是一次跳一级,分两次跳,另一种是一次跳两级;那现在假设有n
级台阶的话,我们可以把跳法看成是台阶数n
的函数F(n)
,首先第一次跳就有两种跳法,一种是跳一级,剩下n-1
级台阶的跳法就有F(n-1)
中种跳法,另一种是第一次跳两级,剩下的n-2
级楼梯的跳法就有F(n-2)
种,那么这种情况下总的跳法就是F(n-1)+F(n-2)
。
我们可以把上述思路总结为一个公式,既Fibonacci数列,对于Fibonacci数列的解法总结于我的另一篇博客:
https://blog.csdn.net/hansionz/article/details/82228109
变态跳台阶问题
0.什么是变态跳台阶问题
在一些面试题中,我们还可以见到一些青蛙跳台阶的变形,就是一次可以跳一级,可以跳两级,也可以跳3级,一共有多少种跳法
1.解题思路
其实这道题和上边的思路完全一样,我们可以根据上边的思路可以写出一个递归公式:
可以看出,这个问题和Fibonacci很像,可以轻松写出代码
long long FibonacciQ(unsigned int n)
{
if (n <= 2)
{
return n;
}
if (n == 3)
{
return 4;
}
return FibonacciQ(n - 1) + FibonacciQ(n - 2) + FibonacciQ(n - 3);
}