package com.dazhongdianping.interview;
public class Steps {
/**
* 问题描述:一次可以走1、2、3级台阶,N级台阶,一共有多少种走法?
* 问题简化:第一步可以走1级,剩下N-1级台阶,第一步可以走2级,剩下N-2级,第一步可以走3级,剩下N-3级
* 且f(2)=2,f(1)=1,f(0)=1
*/
public static void main(String[] args) {
Steps steps = new Steps();
steps.method1(10);
int s = steps.method2(10);
System.out.println("10级台阶共有:"+s+"种走法!");
}
/**
* 非递归算法
* @param n
*/
public void method1(int n){
int f0 = 1;
int f1 = 1;
int f2 =2;
int result =0;
if(n<2){
result = f1;
}else{
for(int i=2;i<n;i++){
result = f2+f1+f0;
f0 = f1;
f1 = f2;
f2 = result;
}
}
System.out.println(n +"级台阶共有 :"+result+"种走法!");
}
/**
* 递归算法
* @param n
*/
public int method2(int n){
if(n == 2){
return 2;
}else if(n == 1){
return 1;
}else if(n == 0 ){
return 1;
}else{
return method2(n-1)+method2(n-2)+method2(n-3);
}
}
}
运行结果:
10级台阶共有 :274种走法!
10级台阶共有:274种走法!