递归和非递归的区别

递归好处:代码更简洁清晰,可读性更好  
递归可读性好这一点,对于初学者可能会反对。实际上递归的代码更清晰,但是从学习的角度要理解递归真正发生的什么,是如何调用的,调用层次和路线,调用堆栈中保存了什么,可能是不容易。但是不可否认递归的代码更简洁。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。  
 
  递归坏处:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

循环方法比递归方法快, 因为循环避免了一系列函数调用和返回中所涉及到的参数传递和返回值的额外开销。   
  递归和循环之间的选择。一般情况下, 当循环方法比较容易找到时, 你应该避免使用递归。这在问题可以按照一个递推关系式来描述时, 是时常遇到的, 比如阶乘问题就是这种情况。 反过来, 当很难建立一个循环方法时, 递归就是很好的方法。实际上, 在某些情形下, 递归方法总是显而易见的, 而循环方法却相当难找到。当某些问题的底层数据结构本身就是递归时, 则递归也就是最好的方法了。 
---------------------------------------------------------------------------------------------------------------------- 递归其实是方便了程序员难为了机器。它只要得到数学公式就能很方便的写出程序。优点就是易理解,容易编程。但递归是用栈机制实现的(c++),每深入一层,都要占去一块栈数据区域,对嵌套层数深的一些算法,递归会力不从心,空间上会以内存崩溃而告终,而且递归也带来了大量的函数调用,这也有许多额外的时间开销。所以在深度大时,它的时空性就不好了。

循环其缺点就是不容易理解,编写复杂问题时困难。优点是效率高。运行时间只因循环
次数增加而增加,没什么额外开销。空间上没有什么增加。

转载于:https://www.cnblogs.com/study-ma/p/3948409.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS背景半透明渐变问题

IOS背景半透明渐变问题 问题描述: 给一个层设置半透明的背景,使用 background:linear-gradient(to bottom, transparent, #ffffff),其中使用transparent的时候 在安卓上显示正常(白色半透明,但ios上显示透明渐变会出…

都客仿站系列教程四:javascript入门

javascript&#xff0c;和用户交互的东西。请看下面的例子&#xff1a; <script type"text/javascript">alert("ok"); </script>请参考http://wenku.baidu.com/view/7ee708c5d5bbfd0a7956732d.html 转载于:https://www.cnblogs.com/dukey/arch…

JAVA API

----API概念&#xff1a; API&#xff08;Application Programming Interface&#xff09;应用程序接口。 在Java中的API就是JDK中提供的各种功能。如CreateWindow就是一个API函数&#xff0c;在应用程序中如果要调用这个函数那么操作系统就会按该函数提供的参数信息产生一个相…

FusionCharts使用问题及解决方法(三)-FusionCharts常见问题大全

前两篇文章中&#xff0c;我们总结了FusionCharts图表的一些常见问题&#xff08;FAQ&#xff09;及解决方法&#xff0c;本文继续讨论FusionCharts使用者常见的一些复杂的报错及解决方法。 当HTML、SWF和JavaScript文件在同一个文件夹中时&#xff0c; FusionCharts工作正常&a…

图像PSNR值及MSE值的计算

% 图像峰值信噪比PSNR、均方根误差MSE % By lyqmath % Xidian University function [PSNR, MSE] psnr(X, Y) % 计算峰值信噪比PSNR、均方根误差MSE % 如果输入Y为空&#xff0c;则视为X与其本身来计算PSNR、MSEif nargin<2D X; elseif any(size(X)~size(Y))error(The inp…

Javascript基础(二)

Javascript基础&#xff08;二&#xff09;事件&#xff1a;条件语句类型转换正则表达式regexp错误抛出void事件&#xff1a; 是发生在HTML元素上的行为&#xff0c;可以是浏览器行为&#xff0c;可以是用户行为 a) html 元素添加事件属性&#xff1a; <p οnclick alert…

网页字体设置你了解吗?

以前做项目的时候就依葫芦画瓢的设置 { font-family:arial,”microsoft yahei”,simsun,sans-self; } 等类似的字体&#xff0c;然而当更多的设备和系统出现后&#xff0c;以前这样的设置已不能满足网页在各设备上的显示需求。 就拿最简单的宋体(simsun)来说吧&#xff0c;在Wi…

SpringMVC redirect中文乱码问题

在使用"redirect:xxx.do?param中文"时会出现乱码问题&#xff0c;解决方案如下&#xff1a; 使用model.addAttribute来替代直接拼接参数。如下&#xff1a; RequestMapping("t") public String t(String param, Model model) {model.addAttribute("p…

设计模式笔记(7)---适配器模式(结构型)

Gof定义 将一个类的接口转换成客户所希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 动机 在软件系统中&#xff0c;由于应用环境的变化&#xff0c;常常要将“一些现存的对象”放在心的环境中应用&#xff0c;但是新环境要求的接口…

js RegExp正则表达式常见用例

js RegExp正则表达式常见用例判断输入是否为数字、字母、下划线组成判断字符串是否全部为字母判断字符串是否全部为数字判断是否带有小数判断是否中文名称组成判断手机号判断身份证判断验证码判断邮件地址是否合法判断是否是emoji表情获取字符长度&#xff0c;中文算2&#xff…

软件设计模式之适配器模式(JAVA)

什么是适配器模式&#xff1f; 在计算机编程中&#xff0c;适配器模式&#xff08;有时候也称包装样式或者包装&#xff09;将一个类的接口适配成用户所期待的。适配器能将因为接口不兼容而不能在一起工作的类工作在一起&#xff0c;做法是将类自己的接口包裹在一个已存在的类中…

表达式与运算符

表达式与运算符 表达式 与数学中的定义相似&#xff0c;表达式是指具有一定的值的、用运算符把常数和变量连接起来的代数式。一个表达式可以只包含一个常数或一个变量。运算符可以是四则运算符、关系运算符、位运算符、逻辑运算符、复合运算符。下表将这些运算符从高优先级到低…

Javascript 调试技巧

Javascript 调试技巧 在代码中寻找错误 1&#xff09;alert 方法&#xff1a; 弹框提示 2&#xff09;console 方法 在调试窗口上打印 JavaScript 值 3&#xff09;断点调试 在浏览器开发者工具中为JS代码添加断点&#xff0c;让JS执行到某一特定位置停住&#xff0c;方便…

[POJ2157]Maze(DFS)

题目链接&#xff1a;http://poj.org/problem?id2157 题意&#xff1a;给一张地图&#xff0c;地图里有门和钥匙&#xff0c;想要开门必须集齐所有钥匙。给定起点和终点&#xff0c;问从起点出发能否到达终点。 爆搜floodfill&#xff0c;每填一次考虑是否到达终点&#xff0c…

WPF程序将DLL嵌入到EXE的两种方法

2019独角兽企业重金招聘Python工程师标准>>> WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是《Visual Studio 版本转换工具WPF版开源了》的续&#xff0c;关于《Visual Studio 版本转换工具WPF版开源了》可以参看地下地址&#xff08;两篇是一样的&#xff09;&…

华中地区高校第七届ACM程序设计大赛——之字形矩阵【2012年5月27日】

题意&#xff1a;输入a b Right 或 a b Down ,根据输入输出之字形路径的矩阵。 1 #include <stdio.h>2 int xx[4]{0,1,-1,1},yy[4]{1,0,1,-1};3 int map[100][100],col,row,x,y,dir,steps,idx;4 char sel[10];5 void nextdir()6 {7 switch(dir)8 {9 case 0: …

Javascript 常见使用误区

Javascript常见使用误区 1&#xff09;比较运算符&#xff1a; var x 0; if (x 10) // true if (x 0) // falsevar x 10; var y "10"; if (x y) // true if (x y) // false 恒等计算符&#xff0c;同时检查表达式的值与类型var x 10; switch(x) { //执行ca…

内存泄漏和内存溢出的优化

内存泄漏&#xff1a; 对象在内存heap堆中中分配的空间&#xff0c; 当不再使用或没有引用指向的情况下&#xff0c; 仍不能被GC正常回收的情况。 多数出现在不合理的编码情况下&#xff0c; 比如在Activity中注册了一个广播接收器&#xff0c; 但是在页面关闭的时候进行unRegi…

使用ftp搭建yum源问题解决

wget 无法连接的情况 关闭linux 防火墙 1) 重启后生效 开启&#xff1a; chkconfig iptables on 关闭&#xff1a; chkconfig iptables off 2) 即时生效&#xff0c;重启后失效 开启&#xff1a; service iptables start 关闭&#xff1a; service iptables stop 需要说明的是对…

oracle文件

1、控制文件和日志文件 控制文件&#xff08;Control File&#xff09;是一个很小的二进制文件&#xff0c;用于描述和维护数据库的物理结构。在Oracle数据库中&#xff0c;控制文件相当重要&#xff0c;它存放有数据库中数据文件和日志文件的信息。Oracle数据库在启动时需要访…