一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。
示例 1:
输入:n = 2
输出:2
示例 2:
输入:n = 7
输出:21
示例 3:
输入:n = 0
输出:1
算法思路: 一开始人是蒙的,这种题目如果使用穷举法的话,结果实在太多了,而且题目一开始就说明了有取余的情况发生,所以需要进行推导推导出来规律,枚举前几种情况,当小青蛙进行跳一跳的时候,在跳最后的一个或俩个台阶时只会跳一个或者跳两个,所以可以考虑递归的方法,类似于斐波那契数列的做法即可。
#include<iostream>
using namespace std;
const long long mod = 1e9 + 7;
int jump(int number)
{
if (number < 3)
return number;
else
{
return (jump(number - 1) + jump(number - 2))%(mod);
}
}
int main()
{
int num = 0;
cout << "请输入小青蛙跳跃的次数:";
cin >> num;
cout << "小青蛙跳跃的次数为:" << jump(num) << endl;
return 0;
}