思路:因为一次可以上1阶,2阶或者3阶,所以上n阶楼梯的上法就是=先上1阶后的上法+先上2阶后的上法+先上3阶后的上法(这里就是3个子问题的相加)
所以就可以表示成f(n)=f(n-1)+f(n-2)+f(n-3)
最后找到递归出口就行了。(这里递归出口有多种看自己怎么想了)
例如:当n=0的时候返回1(已经走完楼梯了是一种方法)n<0的时候返回0。
或者像这样
if(n==3)
return 4;
if(n==1)
return 1;
if(n==2)
return 2;
代码
import java.util.*;
/*
小白正在上楼梯,楼梯上有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法小白可以有多少种方法走完这个楼梯
*/
public class 小白上楼梯 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int res = f(n);
System.out.println(res);
}
public static int f(int n) {
// TODO Auto-generated method stub
if(n==3)
return 4;
if(n==1)
return 1;
if(n==2)
return 2;
return f(n-1)+f(n-2)+f(n-3);
}
}
但是由于是尾递归,效率极低,而且所有的尾递归都可以改写长迭代的方式,于是
迭代函数如下
int statis(int n)
{
int a1 = 1,a2 = 2,a3 = 4;
int sum;
if(n == 1)return a1;
else if(n == 2) return a2;
else if(n == 3 ) return a3;
else{
for(int i = 4; i<=n;i++){
sum = a1+a2+a3;
a1 = a2;a2 = a3; a3 = sum;
}
}
return sum;
}