一、题目要求:
要求:有n级台阶,每次只能走一步或者两步,共有多少种走法?
使用递归与非递归实现要求
二、代码实现:
/*
Date by 2022.7.22
要求:有n级台阶,每次只能走一步或者两步,共有多少种走法?
使用递归与非递归实现要求
*/
public class Step {
//函数声明:递归方法
int f(int n) {
//异常解决
if (n < 1) {
return 0;
}
if (n == 1 || n == 2) {
return n;
}
//第n级台阶的走法=第(n-1)级台阶的走法+第(n-2)级台阶的走法
return f(n - 1) + f(n - 2);
}
//函数声明:非递归调用
int stepTotal(int n) {
//异常解决
if (n < 1) {
return 0;
}
if (n == 1 || n == 2) {
return n;
}
//判断n=3情况下,有几种走法
//(n=3的走法) = (n=1的走法) + (n=2的走法)
int lastTwo = 1;
int lastOne = 2;
int total = lastTwo + lastOne;
//判断之后的值
for (int i = 4; i <= n; i++) {
lastTwo = lastOne;
lastOne = total;
total = lastOne +lastTwo;
}
return total;
}
public static void main(String[] args) {
//先创建一个对象,用于调用类的方法
Step step = new Step();
//使用一个for循环进行测试,先测试递归调用
for (int i = 1; i <= 10; i++) {
System.out.println("当台阶有" + i +"级时,有" + step.f(i) + "种走法");
}
System.out.println("------------------------------");
//测试非递归调用
for (int i = 1; i <= 10; i++) {
System.out.println("当台阶有" + i +"级时,有" + step.stepTotal(i) + "种走法");
}
}
}
三、测试结果:
测试OK,代码OK。