上楼梯问题,斐波那契数列

问题描述:

有一楼梯共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;
	}
}

  

时间: 2024-10-10 21:15:07

上楼梯问题,斐波那契数列的相关文章

Hdu2041 超级楼梯 (斐波那契数列)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2041 超级楼梯 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 86599    Accepted Submission(s): 44398 Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级

超级楼梯-斐波那契数列的运用

Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数. Output 对于每个测试实例,请输出不同走法的数量 Sample Input 2 2 3 Sample Output 1 2 每次有2种走法,并且要求最后还能干好到达M级.正着不行,逆向思维一下,要达到最后一级的前一级只能是M-

斐波拉契数列、楼梯问题、奶牛问题

斐波拉契数列:波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)[from 百度百科 http://baike.baidu.com/link?url=8LKtKTAllUGDMe610zIO0DAjS3CCeAOpXiCFvH_Y47_I_XDRgzyGcrzsodd1OHO726FJNPWkqzkQC7PIuGu_

斐波纳契数列

查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: 前2个数是 0 和 1 . 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ... 样例 给定 1,返回 0 给定 2,返回 1 给定 10,返回 34 虽然这道题是一道入门级的题目,可是在第一遍做的时候并没有多想,直接使用的递归,然后数据通过95%,显示的到47的时候就溢出了.经过学习前辈的经验,该题的收获如下: 方法1:使用递归解,

斐波那契数列算法分析

背景: 假定你有一雄一雌一对刚出生的兔子,它们在长到一个月大小时开始交配,在第二月结束时,雌兔子产下另一对兔子,过了一个月后它们也开始繁殖,如此这般持续下去.每只雌兔在开始繁殖时每月都产下一对兔子,假定没有兔子死亡,在一年后总共会有多少对兔子? 在一月底,最初的一对兔子交配,但是还只有1对兔子:在二月底,雌兔产下一对兔子,共有2对兔子:在三月底,最老的雌兔产下第二对兔子,共有3对兔子:在四月底,最老的雌兔产下第三对兔子,两个月前生的雌兔产下一对兔子,共有5对兔子:……如此这般计算下去,兔子对数分

斐波那契数列——摘自搜狗百科

1数列公式 递推公式 斐波那契数列:0.1.1.2.3.5.8.13.21.34.55.89.144... 如果设F(n)为该数列的第n项(n∈N*),那么这句话可以写成如下形式: F(0) = 0,F(1)=F(2)=1,F(n)=F(n-1)+F(n-2) (n≥3) 通项公式 通项公式的推导方法一:利用特征方程 线性递推数列的特征方程为: X^2=X+1 解得 X1=(1+√5)/2, X2=(1-√5)/2. 斐波拉契数列则F(n)=C1*X1^n + C2*X2^n ∵F(1)=F(2

关于斐波那契数列的一点小结

斐波那契数列就是0,1,1,2,3,5……这样的一波数列,第三个数是前两个数的和. 兔子问题,上楼梯的台阶方法的个数问题,都是斐波那契数列. 斐波那契可以简单的用递归实现: 1 def fib(n) 2 # Calculate the nth Fibonacci Number 3 return n if n == 0 || n == 1 4 return fib(n-1) + fib(n-2) 5 end 简单有效,但是在n很大的时候时间长. 也可以用迭代来实现 1 def fib(n) 2 r

斐波拉契数列应用

斐波拉契数列的应用实例 什么是斐波拉契数列(Fibonacci sequence)?将其前几项写出来就是:0 1 1 2 3 5 8 13 21....... 观察不难发现其规律是,从第二项起,每一项的值都为前两项的和.而且这个数列有趣的地方就在于这个非常特殊的规律.它是有通项公式的,但是推导与主题无关,而且也几乎用不上,所以就不多叙述. long fi(int n) { if(n==1||n==2) return 1; else return fi(n-1)+fi(n-2); } 但是如果这样

斐波那契数列解决上台阶的问题

斐波那契数列(Fibonacci sequence)因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用. 数列的特征:第1项是0,第2项是第一个1,从第3项开始,每一项都