该问题和斐波那契额数列问题(大兔子生小兔子的问题)其实是一个问题,是最基本的递归问题
package com.ftl;
import java.util.Scanner;
public class TiaoTaiJie {
//一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
public static void main(String[] args) {
//思路:设跳到第n阶共有f(n)跳法,如果下一步要跳到第n阶那么现在一定要在第n-1阶或n-2阶
//所以f(n)=f(n-1)+f(n-2)
//所以采用递归算法
TiaoTaiJie ttj=new TiaoTaiJie();
Scanner sc=new Scanner(System.in);
System.out.println("要跳到多少阶台阶:");
int n=sc.nextInt();
System.out.println("跳到第n阶台阶,共有:"+ttj.digui1(n)+"种方法!");
System.out.println("跳到第n阶台阶,共有:"+ttj.digui2(n)+"种方法!");
System.out.println("跳到第n阶台阶,共有:"+ttj.digui3(n)+"种方法!");
System.out.println("跳到第n阶台阶,共有:"+ttj.digui4(n)+"种方法!");
}
//采用递归算法计算出跳到第n阶共有多少种方法
public int digui1(int n) {
if (n==1) {
return 1;
}else {
if (n==2) {
return 2;
}
else {
return digui1(n-1)+digui1(n-2);
}
}
}
//问题进阶:一只青蛙一次可以跳上1级,2级,3级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法
//思路:同上题f(n)=f(n-1)+f(n-2)+f(n-3)
public int digui2(int n) {
if (n==1) {
return 1;
}
else if (n==2) {
return 2;
}
else if (n==3) {
return 4;
}else {
return digui2(n-1)+digui2(n-2)+digui2(n-3);
}
}
//问题再进阶:假设这只青蛙一次能跳动的阶数为1~~n阶
//思路:f(n)=f(n-1)+f(n-2)+f(n-3)+f(n-4)+……+f(3)+f(2)+f(1)
//将上式进行简化:f(n-1)=f(n-2)+f(n-3)+f(n-4)+……+f(3)+f(2)+f(1)
//得到f(n)=2*f(n-1)=2*2*f(n-2)
//化简得到f(n)=2的(n-1)次方*f(1)=2的(n-1)次方
public int digui3(int n) {
return (int) Math.pow(2, (n-1));
}
//问题再再进阶:假设这只青蛙一次能跳动的阶数为1、3、5阶
//思路:同上题f(n)=f(n-1)+f(n-3)+f(n-5)
public int digui4(int n) {
if (n==1) {
return 1;
}
else if (n==2) {
return 1;
}
else if (n==3) {
return 2;
}
else if (n==4) {
return 3;
}
else if (n==5) {
return 4;
}
else {
return digui4(n-1)+digui4(n-3)+digui4(n-5);
}
}
}