fibonacci数列的两种求解方式:基础递归VS动态规划

/*
 * 基础解法,按照递归方法求解,该算法的运算时间是指数级增长的
 * 这种算法对于相似的子问题进行了重复的计算,因此不是一种高效的算法
 */
public class FibonacciRecursion {

	//-----------计算Fibonacci数列值的递归函数--------------
	public static int fib(int n){
		if(n==1||n==2){//序列中第1,2个数为1
			return 1;
		}
		return fib(n-1)+fib(n-2);
	}

	public static void main(String[] args) {
		int i=6;
		System.out.println("fib("+i+"):"+fib(i));
	}
}
/*
 * 可以通过保存已经算出的子问题的解来避免重复计算
 * 即使用动态规划的技术
 */
public class FibonacciDP {

	// ----------使用动态规划(DP)求fibonacci数列的值------------
	public static int fib(int n) {
		int[] array = new int[n];//用来保存动态规划过程中的状态
		array[0] = 1;
		array[1] = 1;
		for (int i = 2; i < n; i++)
			array[i] = array[i - 1] + array[i - 2];//动态规划的状态转移式
		return array[n-1];
	}

	public static void main(String[] args) {
		System.out.println("fib(6):"+fib(6));
	}
}

时间: 2024-08-24 04:25:20

fibonacci数列的两种求解方式:基础递归VS动态规划的相关文章

斐波那契数的两种实现方式———1.递归实现,2迭代实现

对于斐波那契数,若是采用递归的算法,每个递归调用都将触发另外两个递归调用,而这两个中调用任意一个还会触发另外两个的调用.递归调用的时间复杂度O(2^N),空间复杂度为O(N),所以在计算略大的数会花费一定的时间和空间.递归程序如下: #include<iostream> using namespace std; unsigned long long Fib(size_t num) {     if (num < 2)     {         return num;     }    

c编程:求Fibonacci数列的两种方式。

一种是输入一个整数n,则程序输出在n位置上的Fibonacii数字: #include<stdio.h> int Fibo(int n) { if(n==1||n==2) return 1; return Fibo(n-1)+Fibo(n-2); } int main() { int n; scanf("%d",&n); printf("%d\n",Fibo(n)); return 0; } 一种是保存在数组中以便输出: #include<

Redis两种持久化方式(RDB&amp;AOF)

爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Redis并发锁 windows下redis基础操作与主从复制 从而 数据备份和读写分离 Redis两种持久化方式(RDB&AOF) Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就

Web API之认证(Authentication)两种实现方式【二】(十三)

前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再废叙述废话. 序言 对于所谓的认证说到底就是安全问题,在Web API中有多种方式来实现安全,[accepted]方式来处理基于IIS的安全(通过上节提到的WindowsIdentity依赖于HttpContext和IIS认证)或者在Web API里通过使用Web API中的消息处理机制,但是如果我们想应用程序运行在IIS之外此时Win

斐波那契的两种实现方式

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. #include<stdio.h> /* 解决斐波那契数列问题: 斐波那契数列指的是这样一个数列 0, 1,

[转]Web APi之认证(Authentication)两种实现方式【二】(十三)

本文转自:http://www.cnblogs.com/CreateMyself/p/4857799.html 前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底就是安全问题,在Web API中有多种方式来实现安全,[accepted]方式来处理基于IIS的安全(通过上节提到的WindowsIdentity依赖于HttpContext和IIS认证)

算法整理(二)---快速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下快速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).因为用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的非常清楚了,分治法+挖坑法,我就不多说了.就是以某个数为参照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间采取同样的方法进行递归. 就其整

算法整理(二)---高速排序的两种实现方式:双边扫描和单边扫描

首先简单谈下高速排序的特点,时间复杂度O(nLog n),最差时间复杂度O(n^2),平均时间O(nLog n).由于用到了函数栈,空间复杂度为O(lg n),最差为O(n).是一种不稳定的排序方法.基本思想是分治法,这位大大的http://blog.csdn.net/morewindows/article/details/6684558 讲的很清楚了,分治法+挖坑法,我就不多说了.就是以某个数为參照,使得左边的都小于他,右边的数都大于他.然后对他的左右两个区间採取相同的方法进行递归. 就其总体

PlaceHolder的两种实现方式

placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 1 <input type="text" name="loginName" placeholder="邮箱/手机号/QQ号"> 目前浏览器的支持情况 浏览器 IE6/7/8/9 IE10+ Firefox Chrome Safari  是否支持 NO YES YE