【算法】斐波那契数列

简介: 主要内容:斐波那契数列(兔子问题)递归算法和递推算法斐波那契数列(兔子问题)问题描述:刚出生的兔子,长到第三个月开始(忽略月份大小)就可以繁殖下一代。假如1月1日抱来一公一母两只兔子,那么3月1日时,就会生出第一代兔子,并且正好也是一公一母。

主要内容:

  1. 斐波那契数列(兔子问题)
  2. 递归算法和递推算法

斐波那契数列(兔子问题)

问题描述:刚出生的兔子,长到第三个月开始(忽略月份大小)就可以繁殖下一代。假如1月1日抱来一公一母两只兔子,那么3月1日时,就会生出第一代兔子,并且正好也是一公一母。假设兔子没有死亡,每代兔子都可以正常繁殖下一代,那么计算抱来一对兔子第N月时,兔子的总量是多少对。(刚抱来算第一个月)

观察可知,从第三月开始,每个月的兔子总量等于前两个月的兔子总量之和,由此,便很容易确定其可以用斐波那契数列的思路来解决。

  公式:Fib(n)=Fib(n-1)+Fib(n-2),n>3

现在来使用代码实现,我使用的是java来实现

递归算法和递推算法

package lucas;

import java.util.Scanner;

/**兔子问题<br/>
 * 问题描述:<br/>
 * 刚出生的兔子,长到第三个月开始(忽略月份大小)就可以繁殖下一代。<br/>
 * 假如1月1日抱来一公一母两只兔子,那么3月1日时,就会生出第一代兔子,并且正好也是一公一母。<br/>
 * 假设兔子没有死亡,每代兔子都可以正常繁殖下一代,
 * 那么计算抱来一对兔子第N月时,兔子的总量是多少对。(刚抱来算第一个月)
 * @author LENOVO
 *
 */
public class Rabbit {
	//递归,斐波那契数列
	public static double Fib(double n){
		if(n==1.0||n==2.0){
			return 1.0;
		}else{
			return Fib(n-1.0)+Fib(n-2.0);
		}
	}
	public static void main(String[] args) {
		/*
		 * 由题意可知,兔子序列从第三个月开始,
		 * 每个月的数据是前两个月的和,所以很容易想到递归
		 * 使用double(8字节)可以容纳很大的数字
		 * 用递归很慢,只适合小一点的数字。
		 * */
		double f,n;
		System.out.print("抱来兔子的第N月:");
		Scanner sc=new Scanner(System.in);
		n=sc.nextDouble();
		System.out.print("当前兔子总量(对):");
		f=Fib(n);
		System.out.format("%.0f",f);
	}

}

  得到的结果(真的很慢):

兔子的增长序列是斐波那契数列,所以考虑使用递推算法。

递推算法要比递归速度快很多,空间占用也少很多。

package lucas;

import java.util.Scanner;

/**兔子的增长序列是斐波那契数列,所以考虑使用
 * 递推算法。<br/>
 * 递推算法要比递归速度快很多,空间占用也少很多。
 * @author LENOVO
 *
 */
public class Rabbit2 {

	public static void main(String[] args) {
		double f,n,i;
		double a,b;//存储前2个月兔子总量
		
		System.out.println("抱来兔子的第n月:");
		Scanner sc=new Scanner(System.in);
		n=sc.nextDouble();
		
		a=b=f=1.0;
		//从第3月才开始累加
		for(i=3.0;i<=n;i++){
			f=a+b;//计算第i月的数量
			a=b;
			b=f;
		}
		System.out.print("当前兔子总量(对)");
		System.out.format("%.0f",f);		
	}

}

  结果显示(真的是秒速):

 

参考自:http://www.cnblogs.com/kangjianwei101/p/5221542.html

目录
相关文章
|
7月前
|
算法
【算法优选】 动态规划之斐波那契数列模型
【算法优选】 动态规划之斐波那契数列模型
|
7月前
|
机器学习/深度学习 算法 测试技术
【动态规划】C++算法:446等差数列划分 II - 子序列
【动态规划】C++算法:446等差数列划分 II - 子序列
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
31 0
|
2月前
|
算法 Java 编译器
【递归算法】斐波那契变形问题(C/C++)
【递归算法】斐波那契变形问题(C/C++)
|
4月前
|
存储 算法
读《趣学算法》:重开算法之门,神奇的兔子数列(斐波那契数列)
本文通过《趣学算法》中的斐波那契数列问题,探讨了算法的递归实现、时间复杂度分析,并展示了如何通过迭代和优化存储空间来改进算法,最终将时间复杂度从指数级降低到线性级,并将空间复杂度从线性级降低到常数级。
93 0
读《趣学算法》:重开算法之门,神奇的兔子数列(斐波那契数列)
|
6月前
|
算法 Java
斐波那契查找算法 (java)
斐波那契查找算法 (java)
|
6月前
|
存储 SQL 算法
解锁动态规划:从斐波那契到高效算法
解锁动态规划:从斐波那契到高效算法
|
6月前
|
算法
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
算法特训,AB5 .点击消除BC.149简写单词牛客.除2!牛客.Fibonacci数列
|
7月前
|
算法
算法沉淀 —— 动态规划篇(斐波那契数列模型)
算法沉淀 —— 动态规划篇(斐波那契数列模型)
62 0
|
7月前
|
算法
算法修炼-动态规划之斐波那契数列模型
算法修炼-动态规划之斐波那契数列模型