问题描述:一只青蛙一次可以跳上
1
级台阶,也可以跳上
2
级
……
它也可以跳上
n
级。求该青蛙跳上一个
n
级的台阶总共有多
少种跳法。
问题分析:
动态规划
状态:
子状态:跳上
1
级,
2
级,
3
级,
...
,
n
级台阶的跳法数
f(n)
:还剩
n
个台阶的跳法数
状态递推:
n
级台阶,第一步有
n
种跳法:跳
1
级、跳
2
级、到跳
n
级
跳
1
级,剩下
n-1
级,则剩下跳法是
f(n-1)
跳
2
级,剩下
n-2
级,则剩下跳法是
f(n-2)
f(n) = f(n-1)+f(n-2)+...+f(n-n)
f(n) = f(n-1)+f(n-2)+...+f(0)
f(n-1) = f(n-2)+...+f(0)
f(n) = 2*f(n-1)
初始值:
f(1) = 1
f(2) = 2*f(1) = 2
f(3) = 2*f(2) = 4
f(4) = 2*f(3) = 8
所以它是一个等比数列
f(n) = 2^(n-1)
返回结果:
f(N)
//变态青蛙跳台阶
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;
class solution
{
public:
int jumpFloorII(int number)
{
if (number <= 0)
{
return 0;
}
int sum = 1;
for(int i=1;i<number;i++)
{
sum *= 2;
}
return sum;
}
};
int main()
{
solution(b);
b.jumpFloorII(4);
printf("%d\n", b.jumpFloorII(4));
system("pause");
return 0;
}