上樓梯問題,斐波那契數列


問題描述:

有一樓梯共m級,剛開始時你在第一級,若每次只能跨上一級或者二級,要走上m級,共有多少走法?注:規定從一級到一級有0種走法。給定一個正整數int n,請返回一個數,代表上樓的方式數。保證n小於等於100。為了防止溢出,請返回結果Mod 1000000007的值。

算法思路:這道題其實就是斐波那契數列的應用,因為可以走一步,又可以走兩步,開始在第一層台階。所以,上第二層台階,有1種方法,上第三層台階,有2種方法,上后一層,可以通過前一層再走1步,前兩層再走2步.所以,就是f(x)= f(x-1)+f(x-2)

public class GoUpstairs {
	//遞歸
	public static int countWays(int n)
    {
        if(n == 1)
            return 0;
        if(n == 2)
            return 1;
        if(n == 3)
        	return 2;
        if(n > 3)
        	return  countWays(n-1) + countWays(n-2);
        return 0;

    }
	//迭代
	 public static int countWays2(int n)
	    {
	        int[] result = new int[100];
	        result[1] = 0;
	        result[2] = 1;
	        result[3] = 2;
	        for(int i = 4; i <= n; i ++)
	        {
	        	result[i] = result[i-1]+result[i-2];
	        }
	        return result[n];
	    }
	 public static void main(String[] args) 
	 {
		 
		System.out.println(countWays(4));
		System.out.println(countWays2(4));
	 }
}

斐波那契額數列

public class Fibonacci 
{
	//遞歸
	public int fibonacciSequence(int n)
	{
		if(n == 1 || n == 2) return 1;
		if(n > 2) return fibonacciSequence(n - 1) + fibonacciSequence(n - 2);
		return 0;
	}
	
	//迭代
	public int fibonacciSequence2(int n)
	{
		int a = 1, b = 1, sum = 0;
		if(n == 1 || n == 2) return 1;
		for(int i = 3; i <= n; i ++)
		{
			sum = a + b;
			a = b;
			b = sum;
		}
		return sum;
	}
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM