斐波那契数列 & 跳台阶 & 变态跳 - Java

题目描述:Fibonacci

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39

思路

公式:F[n]=F[n-1]+F[n-2](n>=2,F[0]=0,F[1]=1)
递归很容易栈溢出,采用迭代

代码:

//迭代
	public static int fibonacciNew(int n){
		
		if(n <= 0)
			return 0;
		else if(n <= 2)
			return 1;
		else{
			int result = 1;
			int temp = 1;
			for(int i=3;i<=n;i++){
				result += temp;
				temp = result-temp;
			}
			return result;
		}
    }

题目描述:跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:

  • 隐含的Fibonacci
  • 递归(迭代参见上例)
  • 函数伊始,是否将次数初始化需要绕出来

代码:

public static int JumpFloor(int target) {
        
        //需要初始化次数,弯弯需要绕明白
		int kinds = 0;
		
		if(target == 1){
            
			kinds = 1;
		}
		else if(target == 2){
            
            kinds = 2;
        }
		else{
			
            kinds += JumpFloor(target-1)+JumpFloor(target-2); 
		}
		
		return kinds;
    }

题目描述:变态跳

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路

数学归纳法

代码:

//数学归纳:2的n-1次方
		int result = 1;
		
		if(target <= 0)
			return 0;
		else if(target == 1)
			return 1;
		else{
			for(int i=1;i<target;i++)
				result *= 2;
			return result;
		}
posted @ 2017-04-23 06:54  gleesu  阅读(821)  评论(0编辑  收藏  举报