package Demo;
/**
*
*
* 一步可以走一阶或两阶或三阶 输入一个阶数, 有多少种走法
*
* //递推呢就是自下而上,想问题和写程序都是从下往上 从小问题到问题
* n=0 1
* n=1 1
* n=2 2
* n=3 4 (前三项和:1+1+2)
* n=4 7 (前三项和:1+2+4)
*
* 因为如果n=4时 可以先走一步 那么还剩三步,n=3的结果已经算出来了为4
* 如果先走两步,那么还剩两步,那么n=2的值已经算出来了为2
* 如果先走三步,那么还剩一步,n=1的值为1
* 所以当n为4时 有7种走法
*
*
*/
import java.util.Scanner;
public class 走楼梯_递推 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
System.out.println(method(n));
}
static int x1=0;
static int x2=0;
static int x3=0;
static int x_1=0;
private static long method(int n) {
if (n==1 || n==0) {
return 1;
}
if (n==2) {
return 2;
}
if (n==3) {
return 4;
}
x1=1;
x2=2;
x3=4;
for (int i = 4; i <=n; i++) {
x_1=x1;
x1=x2;
x2=x3;
x3=(x1+x2+x_1);
}
return x3;
}
}
package Demo;
/**
* 递归 自上而下的写法 从大问题不断的分解为小问题 然后从最小的问题开始返回来计算
* 特点:需要开辟很大的空间 但是代码简介
* 如果递归的次数明确 那么尽量用递推的方法做
*/
import java.util.Scanner;
public class 走楼梯_递归 {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
System.out.println(method(n));
}
private static long method(int n) {
if (n==0||n==1) {
return 1;
}
if (n==2) {
return 2;
}
if (n==3) {
return 4;
}
return method(n-1)+method(n-2)+method(n-3);
}
}