来源:京东2016算法工程师笔试题
思路:上一级有一种方法,上两级有两种方法,上三级有四种方法,上四级的时候最后一步有三种方法,因此上四级的时候三种可能性为最后一步分一 级、两级、三级三种所以为前三种方法的和,依次类推,类似于斐波那契数列。
f(1) = f(1)
f(2) = f(1)+f(1)
f(3) = f(1) + f(2) +1 (三级:三次一级;一次三级;一次两级+一次一级=2种)
f(4) = f(3) + f(2) + f(1)
f(5) = f(4) + f(3) + f(2)
...
f(15) = f(14) + f(13) + f(12)
...
f(n) = f(n-1) + f(n-2) + f(n-3)
JAVA代码如下:
public static void main(String[] args) {
int f1 = 1;
int f2 = 2;
int f3 = 4;
int result = 0;
for(int i = 4;i<=15;i++){
result = f1+f2+f3;
f1 = f2;
f2 = f3;
f3 = result;
}
System.out.println(result);
}
C++递归版本:
#include
using namespace std;
int count(int x){
if(x==15)
return 1;
else if(x>15)
return 0;
return count(x+1)+count(x+2)+count(x+3);
}
int main(){
cout<
<