美文网首页
递归算法的弊端与改进

递归算法的弊端与改进

作者: 云淡风轻_935f | 来源:发表于2018-10-23 14:22 被阅读0次

递归一直给人的感觉是简洁且优雅,但是在面对较大规模的问题时,递归的弊端就渐渐暴露出来了。因为大量栈的使用导致程序运行速度变得很慢,所以递归算法需要改进。

1.尾递归:函数返回之前的最后一个操作若是递归调用,则该函数进行了尾递归。

但是我发现尾递归貌似并没有很显著的作用???(值得深究)

2.递归改递推,举例斐波拉切数列

递归算法大于40之后就会变得很慢,甚至算不出来。而递推算法可以算更大的数而且算得更快(即使用了long,但是超过50还是会溢出gg)。

所以面额拼凑问题就需要使用递推法,一个一个算,看似非常傻但是却比递归好用,或许这就是大智若愚吧。

可以算10000的递推算法

比较难理解的可能是m[j]+=m[j-den[i]];其等价于之前提到的递推式(1020,100)=(1020-100,100)+(1020,50),但是我们发现(1020,50)没了,这是因为之前已经加上去了。

在这个两层循环中,第一层就是以不同的面额做循环,例如(5,5)=(0,5)+(5,1),之所以省略掉了(5,1)是因为在之前就已经将(5,1)加上去了(m[j]=1),所以可以直接m[j]+=m[j-den[i]].当面额为5循环完毕之后,就可以开始面额为10的循环了。(10,10)=(5,10)+(10,1)=(5,5)+(10,1),由于之前(10,1)已经加上去了,所以直接加上(5,5)就可以了。一次类推直到面额100循环完毕,结果就出来了。(感觉没有讲清楚)

碰到的问题:

1.10000的时候出现溢出。原因:之前在intellij(java)中写的时候用long(64位)没问题,但是C语言(dev c++和VS)long是32位的,所以使用long long

2.dev c++使用的是gcc编译器支持动态数组,VS不支持所以一开始报错。改为long long *m=new long long[money+1];

相关文章

  • 递归算法的弊端与改进

    递归一直给人的感觉是简洁且优雅,但是在面对较大规模的问题时,递归的弊端就渐渐暴露出来了。因为大量栈的使用导致程序运...

  • 一、算法

    目标 递归算法查找算法算法分析十大排序算法 递归算法 什么是递归递归,在数学与计算机科学中,是指在函数的定义中使用...

  • 算法题目10:33台阶法

    实现方式(一):递归法 弊端:当n值较大时,算法执行次数过大,会奔溃。 实现方式二: 优点:算法时间几乎为0

  • 《算法笔记》4.3小节——算法初步->递归

    @[TOC] Contest100000583 - 《算法笔记》4.3小节——算法初步->递归 4.3 递归理论与...

  • python笔试面试项目实战2020百练6归并排序快速排序

    归并排序 现在,我们将注意⼒转向使⽤分治策略改进排序算法。要研究的第⼀个算法是归并排序 ,它是递归算法,每次将⼀个...

  • 递归算法设计

    递归是程序设计中一个很重要的课题。用递归技术设计的算法简单明了。递归算法的设计与分析是算法设计与分析的一大类。 首...

  • 快速幂模板

    递归算法 非递归算法

  • 递归为什么那么慢?递归的改进算法

    不知道大家发现没有,执行递归算法,特别是递归执行层数多的时候,结果极其的慢,而且递归层数达到一定的值,还可能出现内...

  • python递归算法、尾递归算法及优化

    文章概述 递归算法和尾递归概述递归算法的优化 递归算法 介绍:递归算法是计算机编程领域非常重要的一种算法,采用分而...

  • 递归算法与递归算法的应用

    这一讲,我们来聊聊递归法算。 概念 什么是递归算法?若一个算法直接地或间接地调用自己本身,则称这个算法是递归的。 ...

网友评论

      本文标题:递归算法的弊端与改进

      本文链接:https://www.haomeiwen.com/subject/rfvozftx.html