《剑指offer》编程-斐波那契数列/青蛙跳台阶问题

《剑指offer》编程-斐波那契数列/青蛙跳台阶

#情景:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)/ 斐波那契数列问题

斐波那契数列递推公式:

f(0)=0  f(1)=1;   f(2)=f(0)+f(1) ; f(3)=f(2)+f(1) ;.....;即f(n)=f(n-1)+f(n-2)

#分析:青蛙跳台阶问题其实就是 斐波那契数列,对于青蛙来说,可以一步跳一个,也可以一步跳两个。需要问n级的台阶有多少种跳法排列,即逐步递推为若最后一次跳了一下,即n-1级的台阶有多少种跳法加上若最后一次跳了两下,即n-2级的台阶有多少种跳法,最后依次递推。即对于三个台阶来说,最后一步跳一下,即f(2),最后一步跳两下,即f(1), 即f(3)=f(2)+f(1)。

因此此问题的模型则为斐波那契数列。

斐波那契数列的解决方法有两种 1.递归实现 (可理解 程序效率低 大数无法计算)2.迭代消除递归(程序效率高,可以计算大数)

#Java

1.递归实现

public int Fib(int n)
	{
		if(n<=0)
			return 0;
		if(n==1||n==2)
			return 1;
		
		return Fib(n-1)+Fib(n-2);
	}

2.迭代实现

public int Fibonacci(int n) {
    int num=0; 
		
		if(n<=0)
			return 0;
		if(n==1||n==2)
		{
		 return 1;
		}
		int fir=1,sec=1;
		
		for(int i=3;i<n;i++)
		{
			num=fir+sec;
			fir=sec;
			sec=num;
		}
		
		return num;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章