初阶青蛙跳台阶
问题描述:
一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。
解题思路:
如果要知道青蛙跳上第n级台阶有多少种方法,就必须知道青蛙跳上(n-1)级台阶和(n-2)级台阶共有多少种方法。
F(1)=1;
F(2)=2;
F(3)=3;
F(4)=5;
F(5)=8;
…
F(n)=F(n-1)+F(n-2).
是不是和斐波纳契数列相似呢?有木有熟悉的感觉?
递归代码:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入台阶的级数n");
int n=input.nextInt();
System.out.println( jumpFloor(n));
}
public static int jumpFloor(int n){
if(n<3){
return n;
}
return jumpFloor(n-1)+jumpFloor(n-2);
}
}
非递归代码(迭代法):
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入台阶的级数n:");
int n = input.nextInt();
int first=1;
int second=2;
int third=0;
for(int i=3;i<=n;i++){
third=first+second;
first=second;
second=third;
}
System.out.println(third);
}
}
变态青蛙跳台阶
问题描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:
如果要知道青蛙跳上第n级台阶有多少种方法,需要知道青蛙跳上第(n-1)级有多少种方法,跳上第(n-2)级有多少种方法,跳上第(n-3)级有多少种方法…跳上第2级有多少种方法,跳上第1级台阶有多少种方法。
F(1)=1;
F(2)=2;
F(3)=4;
F(4)=8;
…
F(n)=2^(n-1);
递归代码:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入台阶的级数n:");
int n = input.nextInt();
System.out.println(jumpFloor(n));
}
public static int jumpFloor ( int n){
if (n <= 1) {
return n;
}
return 2 * jumpFloor(n - 1);
}
}
非递规代码(Math.pow)
注意:Math.pow的返回值类型是double。
public static int jumpFloor ( int n){
return (int)Math.pow(2,n-1);
}