题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:假设有n级阶梯,跳法种数method=f(n);
f(0) = 0
f(1) = 1
f(2) = f(1) + f(0)
f(3) = f(2) + f(1) + f(0)
...
f(n-1)= f(n-2)+f(n-3)+f(n-4)+ ... + f(2)+(1)+f(0)
f(n) = f(n-1) + f(n-2) + f(n-3) + f(n-4)... + f(2)+(1)+f(0) =f(n-1)+f(n-1) =2f(n-2)
因此
n =0 ; f(n)=0
n = 1 ; f(n) =1
n>=2; f(n)=2f(n-1)
C++代码:
class Solution {
public:
int jumpFloorII(int number) {
int method=0;
if(number<=2)
{
if(number<=0)method=0;
else if(number<=1)method=1;
else method=2;
}
else
{
method = 2*jumpFloorII(number-1);
}
return method;
}
};
另外看到一种不需要递归调用的方法,感觉还不错,也拿出来分享一下
#include "stdafx.h"
#include<iostream>
using namespace std;
class Solution {
public:
int jumpFloorII(int number) {
int method = 1;
if (number <= 2)
{
if (number <= 0)method = 0;
else if (number <= 1)method = 1;
else method = 2;
}
else
{
while (--number)
method = 2 * method;
}
return method;
}
};
int main()
{
Solution qw;
int number = 0;
int method = 0;
cout << "请输入一个数:\n";
cin >> number;
method = qw.jumpFloorII(number);
cout << "跳台阶的方法一共有" << method << "种" << endl;
return 0;
}
分析可参考:http://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387