谈论递归、迭代和循环。人懂迭代,神懂递归。

后续计划好几天没有更新了,没有偷懒。随着源码的阅读,学习到了字典和集合的底层实现。字典这种数据结构的搜索效率很高,底层结构采用了效率优于红黑树的哈希表。红黑树是

各位老铁们,大家好,今天由我来为大家分享谈论递归、迭代和循环。人懂迭代,神懂递归。,以及的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

漫谈递归、迭代、循环

刚开始看递归的时候,之前的一篇体验帖给了我一句大师的名言:人懂迭代,神懂递归。 (迭代是人类的,递归是神圣的。)我正在纠结是否应该学习递归。我只是一个普通人。然后尝试从普通人的角度来理解递归。

汉诺塔问题只能用递归方法解决

维基百科说,递归是一个以自相似方式重复自身的过程。在计算机中,是指在函数的定义中使用函数本身的方法。 “递归”这个词翻译过来就是,recursion-re(重复)+curs(发生),好像就是重复发生的意思。说到递归,大家能想到的词有很多,比如迭代、循环,它们也有递归的意思。

递归:以自相似的方式重复自身,A调用A;递归是一种树结构。这种重复包括两个过程:递归和回归。当递归到达底部时,回归开始。这个过程有点类似于树的深度优先遍历。图片。

迭代:重复反馈过程的活动,每次迭代的结果将作为下一次迭代的初始值,A调用B;递归是一个环结构,从初始状态开始,每次迭代遍历环并更新状态,如此迭代直至结束状态。

图形递归

计算n的阶乘,先看递归实现代码

递归的三个要素必须是:

1.明确递归终止条件

谈论递归、迭代和循环。人懂迭代,神懂递归。

2. 给出递归终止时的解。

3. 提取重复逻辑并缩小问题规模

int func (int n) { if (n==1)////清除递归终止条件return 1;//如何处理递归终止else { return n*func(n – 1);//提取重复逻辑,减小问题的大小}}//代码运行时,func(n)-func(n-1)-.func(3)-func(2)-func(1),不断调用函数本身。图形迭代

计算n的阶乘,看迭代实现代码:

int func(int n){ int result=1;//初始变量,有初始值for(int i=2; i n; i++)//结束条件{ result *=i;//变量如何取值的规则are Updated } return result; }//与递归相比,迭代不会调用自身。迭代必须存在三个元素:

1. 具有初始值的初始变量

2.一条解释变量值如何更新的规则

3. 结束条件

从这里可以看出,迭代和循环非常相似。我们来看看如何使用循环来计算n的阶乘:

int func(int n){ int result=n;//初始变量有初始值while(n 1)//结束条件{ n–; result=result * n//解释变量值如何更新的规则} return result; }//与迭代相比,循环可以是常量重复和变量重复。迭代是一个变化的循环,轮流发生;循环分为常量重复和变量重复。

谈论递归、迭代和循环。人懂迭代,神懂递归。

递归其实是为了让程序员更容易,让CPU更难。递归是利用栈机制实现的。每深入一层,就占用一个栈数据区。如果递归程序是用循环实现的,一般要自己维护一个栈,方便状态回溯。递归程序的目的是利用系统上函数本身的自动变量来记录状态,以便回溯。递归的优点是易于理解和编程;缺点是对于一些嵌套层次较深的算法,内存空间会不足,大量的函数调用也会造成大量额外的时间开销。循环的缺点是不容易理解,难以写出复杂的问题;优点是效率比较高,运行时间只因为循环次数的增加而增加,并且没有额外的空间开销。

递归的应用场景

1.问题的解法是递归的。汉诺塔问题只能用递归方法解决。

2、问题的定义是递归定义的,比如阶乘、斐波那契函数。

3.数据结构是递归的,比如链表和树操作,包括树遍历(前序、中序、后序)

二叉树的遍历使用递归和循环实现

树本身是递归定义的,所以采用递归的方法来实现遍历。代码简洁易懂,但开销比较高;使用循环方法实现遍历时,必须使用栈来模拟实现。

使用递归的方法按顺序遍历二叉树。 Preorder表示根顺序在前,根节点-左子节点-右子节点。

用户评论

谈论递归、迭代和循环。人懂迭代,神懂递归。
桃洛憬

每次看到这两个词就觉得头疼,还是老老实实用循环吧!代码写出来也比递归好理解多了!

    有10位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
大王派我来巡山!

同意!迭代简单直观,递归总是让我看着看着就晕头转向的。也许我是不会编程的天选之子?

    有11位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
﹏櫻之舞﹏

我觉得这个标题很有意思,我一直在想迭代和递归之间有什么本质区别,为什么人类难以理解递归呢?有没有一种方法可以让我们更容易理解递归的概念呢?

    有12位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
海盟山誓总是赊

对于“循环人理解迭代”我觉得很认同,因为我们日常生活中很多事情都是迭代完成的。比如学习一门新语言,从入门到精通就是一个循序渐进的过程。而递归则像是解决问题的分解,就像拆解一个复杂玩具一样。很难一下子看懂整体结构。

    有16位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
优雅的叶子

这篇文章写的太好了!对于刚接触编程的人来说,的确容易被递归的思想所困扰。迭代的方式更容易理解和执行,但学习递归能让我们掌握更强大的程序设计思维,毕竟很多算法都需要用到递归来解决。

    有5位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
减肥伤身#

我个人觉得理解递归并不比理解迭代难,只是递归需要更抽象的思维方式来理解的问题背后的逻辑。就像看一部电影一样,有些情节表面上看起来很复杂,但只要认真分析了每一帧画面和人物之间的关系,就能明白故事的核心。递归也是如此。

    有20位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
陌颜

这篇文章虽然很有意思,但是感觉没有给出太具体的例子说明迭代和递归的区别,对我来说理解起来还是不够清晰…

    有19位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
莫失莫忘

学习编程的确需要多看一些文章,多练习代码才能真正掌握。这个标题很吸引人,让我对递归和迭代的本质的区别产生了更深层次的思考。

    有5位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
墨染天下

我曾经尝试用递归解决一个问题,结果代码写得越来越复杂,最后还是放弃了,改用迭代的方式写的简洁很多…

    有15位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
巷口酒肆

每次看到循环和递归就想说一句:递归太狠了!就像是在不断无限地重复同一件事。不过,有些问题确实只能依靠递归来解决,比如树形结构的遍历算法等等。

    有16位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
麝香味

其实无论是递归还是迭代,最终都是为了实现问题的解题效果,选择哪种方式取决于具体的问题类型和个人的编程习惯。当然,学习更多的编程技巧并不会害了我们!

    有16位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
淡抹烟熏妆丶

我觉得算法设计真的很有乐趣,不同的解决方法会带来截然不同的代码风格和效率. 学习递归能开拓思维范围,提升编程水平, 即使最终还是用迭代实现!

    有18位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
别留遗憾

对于编程新手来说,先掌握循环的思想很重要,毕竟这是最基本的逻辑操作。等对编程基础有了一个初步的了解之后,再慢慢学习递归,我相信一切都会顺其自然。

    有6位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
素颜倾城

同意啊!在一些复杂的任务中,递归方法可以使代码更简洁优雅。但同样需要注意,递归会导致内存栈溢出问题,需要谨慎使用。所以,无论是迭代还是递归,都要根据实际情况进行选择和优化。

    有9位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
闷骚闷出味道了

文章很有深度了! 让我重新思考了如何理解迭代和递归两种编程模式的区别。"神理解递归" 这句话真的是太有含义了,看来要像 "神" 一样才能真正明白递归的奥妙之处!

    有11位网友表示赞同!

谈论递归、迭代和循环。人懂迭代,神懂递归。
猫腻

感觉这个标题说的很形象,人类思维习惯于循序渐进的迭代方式,而递归是一种更高层次的抽象思维。学习编程,不止是写代码,更是一种认知提升的过程

    有18位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/185443.html

(0)
小su's avatar小su
上一篇 2024年9月23日 上午11:29
下一篇 2024年9月23日 上午11:34

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注