青蛙跳台阶:一只青蛙一次可以跳上一级台阶,也可以跳上两级台阶。求该青蛙跳上一个n级台阶共有几种跳法
青蛙在跳的时候可以随机跳1下或者2下
- 但是若只有一个台阶的时候青蛙只能跳一下
F(1)=1 - 当剩下两级台阶的时候就会出现两种方式一次跳一级跳两次或者一次跳两级跳一次
F(2)=2 - 当有三级台阶的时候我们发现可以逆着思考这个问题,三级台阶不管前面跳的什么情况最后都只会有两种情况剩一个台阶或者两个,所以跳三级台阶的问题就变成了跳2(3-1)个台阶和跳1(3-2)个台阶的问题
F(3)= F(1)+ F(2) - 当有四级台阶的时候,最后剩一个或者两个,转换为跳3(4-1)级台阶和跳2(4-2)级台阶的问题
F(4)= F(2)+F(3) - 那么以此类推,当有n级台阶的时候就可以把问题转换为跳(n-1)级台阶和(n-2)级台阶的问题
F(n)=F(n-1)+F(n-2)
那么就形成一个一个递归的逻辑,递归出口就是当只有一级台阶的时候只有一种跳法,当有两级台阶的时候有两种跳法
public static int frogjump(int n){
if(n==0) //当没有台阶的时候返回0
{
return 0;
}
if(n==1) //当只有一个台阶的时候只有一种跳法,返回1
{
return 1;
}
if(n==2) //当只有两个台阶的时候有两种跳法,返回2
{
return 2;
}
int count=frogjump(n-1)+frogjump(n-2); //当有n个台阶等于跳n-1和n-2两种台阶数量的方法之和
return count;
}
public static void main(String[] args){
//青蛙跳台阶问题
Scanner scanner=new Scanner(System.in);
System.out.println("请输入共有几级台阶:");
int x=scanner.nextInt();
int result=frogjump(x);
System.out.println(x+"级台阶共有"+result+"种跳法");
}
结果: