一、提出背景
一只青蛙一次最少可以跳 1层 台阶,一次最多可以跳 2层 台阶,求:该青蛙跳上n 层 的台阶总共有多少种跳法?
二、分析问题
如上图分析:
一层台阶:1种跳法
两层台阶:2种跳法
三层台阶:3种跳法
四层台阶:5种跳法
…
那么我们可以列一个数列:
1 2 3 5 8 13 21 34…
对这些数字是不是很熟悉?没错,问题其实就是隐含了斐波那契数列的思想
三、搜寻规律
- F(1) = 1,F(2) = 2
- 当 n >= 3 时, F(n) = F(n - 1) + F(n - 2)
程序清单1(递归法):
public class Test1 {
public static void main(String[] args) {
int n = 10;
for (int i = 1; i <= n; i++) {
System.out.println(fib(i));
}
}
public static int fib(int n){
if(n==1 || n==2){
return n;
}
else{
return fib(n-1)+ fib(n-2);
}
}
}
//输出 1 2 3 5 8 13 21 34 55 89
程序清单2(迭代法):
public class Test2 {
public static void main(String[] args) {
int n = 10;
fib(n);
}
public static void fib(int n){
int a = 1;
int b = 2;
for (int i = 1; i <= n; i++) {
if (i == 1 || i == 2) {
System.out.println(i);
} else {
int c = a + b;
a = b;
b = c;
System.out.println(c);
}
}
}
}
//输出 1 2 3 5 8 13 21 34 55 89
迭代法分析:
总结
- 经典问题都是有其对应的规律的,通过画图实验一次,两次,三次…找到规律,就能得出结果,不必深挖,否则会陷入问题本身的死循环
- 下一篇博客,十七为大家分享汉诺塔的问题
Over. 谢谢观看哟~