• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

递归和动态规划的区别

武飞扬头像
一只野良猫w
帮助1

递归与动态规划的区别

  1. 递归是从上而下(从大问题到小问题),而动态规划是由下而上(先解决小问题最后到大问题);
  2. 动态规划会储存每个小问题的结果,从而它的计算速度会比递归要快。(代价是动态规划的空间复杂度更高,即用空间换取的时间)。

斐波那契数列。

在数学上,斐波那契数列以如下被以递推的方法定义:
F(1)=1,F(2)=1, F(n)=F(n - 1) F(n - 2)(n ≥ 3,n ∈ N*),
即:新的一项等于前两项之和 1、1、2、3、5、8、13、21、34…

下面让我们来求第n项的斐波那契数列的值,这是一个经典的递归和动态规划问题

递归:

public static long fibonacci(long number) {
        if ((number == 0) || (number == 1))
            return number;
        else
            return fibonacci(number - 1)   fibonacci(number - 2);
    }

可以看出,递归是将大n由上而下,逐渐拆解成2的n次方个小问题,这样的缺点就是,有些值会重复计算。如下图所示,2和1标红代表递归结束。

学新通

动态规划:

public static long fibonacci(long number) {
	if(number==0||number==1){
		return 1;
	}
	int[] nums=new int[number];
	nums[0]=1;
	nums[1]=1;
	for(int i-2;i<n;i  ){
		nums[i]=nums[i-1] nums[i-2];
	}
	return nums[number];
}

动态规划与递归的最大不同就是它 创建了一个数组(空间),来储存后面可能要用到的所有值,这样,就可以避免重复运算的过程,因为后面要用到的值都可以直接来数组里取。还有一点不同就是,它是从前往后进行运算的。

总结:

  1. 递归是由上而下, 动态规划是从下而上;
  2. 递归有重复计算,动态规划的运算速度更快(空间换时间)。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfikifj
系列文章
更多 icon
同类精品
更多 icon
继续加载