递归与迭代的区别分析
递归和迭代是很重要的编程思想,所以对于其原理还是很有必要清楚的。
迭代(iteration) 在 维基百科 上是这样介绍的:
Iteration is the repetition of a process in order to generate a (possibly unbounded) sequence of outcomes. The sequence will approach some end point or end value. Each repetition of the process is a single iteration, and the outcome of each iteration is then the starting point of the next iteration.
迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
上面介绍可以说是非常细致详尽了,这里还是来个小例子具体说明下迭代的我对迭代的理解吧~
分析过程
目的: 接近并达到所需的 目标或结果
过程:重复反馈每一次 过程
文字描述:可以这么想,我左手一袋小球(3个),右手一袋小球(5个),我想知道这两袋里面一共有几个小球,可是我不会加法运算啊(我朋友们也不会),咋办呢,把它给我朋友折腾吧,折腾完给我个结果。
于是我把它交给朋友A,朋友A把左手袋子里的小球拿出一个放到了右手袋子里,告诉朋友B:我左手这袋子有两个小球,右手这袋子里有6个小球,又给了朋友B,朋友B照做又给了朋友C…
图示如下:
即:
3 + 5 |
2 + 6 |
1 + 7 |
0 + 8 |
8 |
————
时间复杂度为 O(x)
空间复杂度为O(1)
递归(Recursion) 在 维基百科 上是这样介绍的:
Recursion occurs when a thing is defined in terms of itself or of its type. Recursion is used in a variety of disciplines ranging from linguistics to logic. The most common application of recursion is in mathematics and computer science, where a function being defined is applied within its own definition. While this apparently defines an infinite number of instances (function values), it is often done in such a way that no loop or infinite chain of references can occur.
递归(英语:Recursion),又译为递回,在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
通俗点说,递归就是那个脍炙人口的故事:从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……’”
典型案例:斐波那契数列
还是上面分小球的例子,递归就是在过程中得到的结果,还要将结果返回给自身,然后继续传下去…小伙伴们一起忙起来~啦啦啦~
图示如下:
即:
3 + 5 |
1 + 2 + 5 |
1 + 1 + 1 + 5 |
1 + 1 + 1 + 0 +5 |
1 + 1 + 1 + 5 |
1 + 1 + 6 |
1 + 7 |
8 |
时间复杂度为 O(x)
空间复杂度为O(x)
若发生事物故障,迭代过程中的数据已经保存在了程序中了,而递归会有一些不可见的过程在暗暗发生…(蹊跷地那种呦~/逃
递归与迭代的区别分析相关推荐
- 递归和迭代的区别——以DNS为例
递归和迭代的区别--以DNS为例 2021.7.22 可能或多或少都听说过:函数的递归调用,牛顿迭代法,在DNS(Domain Name System域名系统)中有递归查询和迭代查询两种······那 ...
- java 递归和迭代的区别
递归就是在过程或函数里面调用自身,而迭代是利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.显然递归用了栈空间,迭代因为始终在一个函数体中,所以使用的是堆空间.迭 ...
- java中递归与迭代的比较_深究递归和迭代的区别、优缺点及实例对比
1.迭代是人,递归是神! 从"编程之美"的角度看,可以借用一句非常经典的话:"迭代是人,递归是神!"来从宏观上对二者进行把握. 从概念上讲,递归就是指程序调用自 ...
- C++递归和迭代的区别,并举例说明
递归:函数自己重复调用自己 迭代:利用变量的原值推算出变量的一个新值:A不停的调用B 例子一:斐波那契数 递归(recursion): #include <iostream> #inclu ...
- 迭代和递归的应用例子c语言,递归和迭代的应用以及区别
斐波那契数列: 1 1 2 3 5 8 13 21 34 55 - fb(n) : 1 n <= 2 fb(n-1) + fb(n-2) n > 2 int fb(n) { if(n &l ...
- 递归和迭代有什么区别?
"递归"和"迭代"的区别如下: 1.递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己.一个函数在其定义中直接或间接调用自身的一种方法,它通常把 ...
- 递归、迭代和分治(1):递归
1.从现实中理解三个概念 可能很多人就已经接触了递归了,不过我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是! 可能也有一大部分人知道递归,也能看的懂递归,但在实际做题过程中,却不 ...
- 递归和迭代_迭代与递归
很多编程小白都会遇到'迭代'和'递归'的问题(包括我自己),大部分同学还是不知道迭代与递归的区别.下面我就尝试用最通俗易懂的模式讲解递归与迭代的区别. 1.迭代: 迭代其实很简单,我们在编程中经常用到 ...
- 研究青蛙跳台阶问题区别函数递归与迭代
文章目录 前言 一.什么是青蛙跳台阶问题 二.使用递归和迭代(非递归)的区别 1.递归实现 2.迭代(非递归) 前言 青蛙跳台阶问题是函数递归的经典问题,也是求斐波那契数的变式,通过研究非递归(迭代) ...
最新文章
- 使用diskpart命令修复U盘分区
- Android Bitmap OutOfMemory 解决的方法
- 41款常用APP被爆过度索取权限、数据共享给第三方
- python--学习1
- python的开发环境包括_下搭建 Python 开发环境
- 图解Team Foundation Server 2013系列
- PowerShell实现“机器人定时在企业微信群中发送消息”功能(上)
- Java的GUI窗体出现乱码解决方法
- 数字电路基础(四) 数据分配器、数据选择器和数值比较器
- 计算机网络-第一章测试题及答案
- Java集成云打印机(芯烨云)——文档篇
- 2022 SpeechHome 语音技术研讨会-回顾
- 高级查询(mysql)
- knex mysql 操作_手把手教你用express + mysql + knex 做个 todoList
- 华擎计算机主板参数,【华擎Z390参数】华擎Z390系列主板参数-ZOL中关村在线
- 电压跟随器的使用方法
- 最好用的房屋租赁软件(租赁行业)
- 调试运用(电流标幺化,PWMDAC调试,ARCTAN反正切)
- 高通芯片GPU是否有类似于HSR功能
- chromosome conformation capture:染色质构象捕获技术