剑指offer-青蛙上台阶问题

 牛客剑指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;
		
	}
}

猜你喜欢

转载自qq-24665727.iteye.com/blog/2337769