当前位置: 首页 > news >正文

算法图解之递归

图一:

 

 图二:

 

 

 

图一和图二对比,它们的作用都是相同的。从流程上分析,图一流程相对比较复杂,而图二则简单明了,

这是某位同行在stackoverflow上面说过的话:如果使用循环,程序的性能可能更高;如果使用递归,程序可能更容易死理解。如何选择要看什么对你来说跟重要。

那么递归和循环之间的区别是什么呢?
不同点:
递归是函数体中调用自己,如果不加以控制,将无休止的调用自己,直到堆栈溢出。
循环是反复执行某一段区域内的代码,如果不加以控制,就会形成死循环。

相同点:
不管是递归还是循环,都要设定一定的条件,以结束递归或循环。

 

基线条件和递归条件

编写递归函数时,必须告诉它何时停止递归。正因为如此,每个递归函数都有其两部分:基线部分和递归条件。
递归条件指的是函数调用自己,而基线条件则指的的函数不再调用自己,从而避免形成无线循环。

代码示例如下:

package cn.recursive.example;public class RecursiveExample {/*** 一个递归方法* @param x* @return*/public static int f(int x) {if (x == 0) {return 0;}return 2 * f(x - 1) + x * x;}public static void main(String[] args) {//调用该方法,当x=2时,输出为6System.out.println(RecursiveExample.f(2));}
}

代码中的return 0相当于基线条件,而return 2 f(x-1)+x x相当于递归条件。

栈是一种数据结构,我们时常用它,而我们自己却不知道。

 

使用栈虽然很方便,但是也是要付出代价:
存储详尽的信息可能占用大量的内存。每个函数调用都要占用一定的内存,如果栈很高,就意味着计算机存储了大量函数调用的信息。在这种情况,通常有如下两种选择:
(1)重新编写代码,转而使用循环;
(2)使用尾递归。这是一个高级递归主题。另外并非所有的语言都支持尾递归;

我的感触:
其实算法图解之递归这一章对我的最大感触就是使用大量的伪代码和生动的图像,使我觉得代码的确是一个生动有活力的家伙。另外我觉得伪代码对于理清代码思路有很大帮助,特别是要写某个功能的时候,这时可以写写伪代码梳理一下逻辑,然后开始动手验证伪代码的逻辑是否正确。

转载于:https://www.cnblogs.com/youcong/p/10925334.html

http://www.xdnf.cn/news/856819.html

相关文章:

  • 电影资源格式说明
  • 运维工程师是干什么的?
  • SpringBoot 事件发布监听机制使用、分析、注意点 (一篇到位)
  • 数据挖掘:关联规则,异常检测,挖掘的标准流程,评估指标,误差,聚类,决策树
  • Cesium工具应用
  • skynet 简介
  • 转:三星安卓手机刷机包(ROM)刷机教程与ROOT教程总索引
  • oracle数据库中insert,从Oracle数据库中读取数据自动生成INSERT语句的方法
  • 快速使用Eolinker API接口管理工具
  • 【Java】通过调用阿里云短信服务给手机发短信
  • IvorySQL Operator | 一键部署IvorySQL集群,高效管理与个性化配置尽在掌控
  • css从入门到精通【超详细笔记】,技术详细介绍
  • 2011年好莱坞大片索引
  • 手动杀毒,SOLA病毒,也称之为worm.script.bat.Agent、Trojan.Win32.Sola病毒)
  • 学习炒股必读的10本书
  • 非理性的积极力量(转)
  • Win32时间类型FILETIME/SYSTEMTIME/WINDOWSTIME(FILETIME这个名字很奇怪,其实他跟FILE并没有直接关系,只是很多File的API中,都以这个为时间的类型)
  • 3DS烧录卡?ACE3DS PRO?这是个闹剧(关于此事的新闻集合)
  • Https网站如何申请免费的SSL证书及操作使用指南
  • 网络嗅探器(影音神探) v4.63 绿色正式版
  • 微信小程序 Computed 示例项目教程
  • 华为桌面小程序在哪里_微信更新7.0.3 版本,小程序迎来桌面级体验?
  • 实现简单QQ聊天功能
  • AI数字人可以用在哪些行业,对这些行业有什么好处
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 8月20日,星期二
  • 解决springboot大片报红,提示:Add library xxx to classpath的问题
  • Perl正则表达式及其实例详解
  • d3dx9_43.dll丢失怎么解决,教你一招搞定的修复方法
  • 魔兽世界私服架设
  • 仓颉编程语言:I/O 流