牛客剑指offer- 青蛙上台阶问题:
问题描述:一只青蛙一次可以上1步或者2步台阶,求该青蛙跳上n级台阶总共有多少种跳法?
问题解析:
第一步有两种跳法:a>假设第一次跳的是1阶,那么剩下的是n-1个台阶,跳法是f(n-1);
b>假设第一次跳的是2阶,那么剩下的是n-2个台阶,跳法是f(n-2);
那么由a,b可知 总跳法 f(n)=f(n-1)+f(n-2);
又因为n=1时,f(1)=1; n=2时,f(2)=2; 可以得出:
| 1,(n=1)
f(n)=| 2,(n=2)
| f(n-1)+f(n-2) (n>2,n为整数)
可以发现这是一个斐波那契数列;
代码如下:
import java.util.Scanner;
/**
* 剑指offer-
* 青蛙上台阶问题:
* 一只青蛙一次可以上1步或者2步台阶,求该青蛙跳上n级台阶总共有多少种跳法
* @author Jiacheng
*
*/
public class Frogwstj {
public static void main(String[] args) {
Frogwstj frog=new Frogwstj();
Scanner scanner=new Scanner(System.in);
while(true){
int count=frog.upperStage(scanner.nextInt());
System.out.println("总共有:"+count+" 种方法");
}
}
/**
* 递归计算
* @param n 台阶数量
* @return 总共上台阶的方法
*/
private int upperStage(int n) {
if(n==1){
return 1;
}
if(n==2){
return 2;
}
int sum=upperStage(n-1)+upperStage(n-2);
return sum;
}
}