首页 > 其他分享 >JS函数:递归函数与迭代函数

JS函数:递归函数与迭代函数

时间:2023-04-14 16:59:07浏览次数:52  
标签:一次 函数 递归 递归函数 重复 JS 循环 迭代

1.递归函数 : 程序中调用自己的函数

程序调用自身的编程技巧称为 递归( recursion)。递归作为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
递归是一个树结构,从字面可以其理解为重复“递推”和“回归”的过程,当“递推”到达底部时就会开始“回归”,其过程相当于树的深度优先遍历

2.迭代函数:重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得结果施行相同的运算步骤得到的。例如利用迭代法求某一数学问题的解。
对计算机特定程序中需要反复执行的子程序(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

迭代是一个环结构,从初始状态开始,每次迭代都遍历这个环,并更新状态,多次迭代直到到达结束状态。

 

 

 

 3.两者的相同点与不同点

相同点:

递归和迭代都是循环的一种。


不同点:

1、程序结构不同

  • 递归是重复调用函数自身实现循环。
  • 迭代是函数内某段代码实现循环。
  • 其中,迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
  • 递归与普通循环的区别是:循环是有去无回,而递归则是有去有回(因为存在终止条件)。

2、算法结束方式不同

  • 递归循环中,遇到满足终止条件的情况时逐层返回来结束。
  • 迭代则使用计数器结束循环。

3、效率不同

  • 在循环的次数较大的时候,迭代的效率明显高于递归。

 

标签:一次,函数,递归,递归函数,重复,JS,循环,迭代
From: https://www.cnblogs.com/wangguoxinyue/p/17303038.html

相关文章

  • vue中使用jsx
    前言相对来说有些时候用jsx更合适,更灵活些安装依赖有对应的包支持yarnadd--dev@vitejs/plugin-vue-jsx配置插件在vite.config.jsimport{defineConfig}from"vite";importvuefrom"@vitejs/plugin-vue";importvueJsxfrom"@vitejs/plugin-vue-jsx";//ht......
  • 【js】setTimeout、Promise、Async/Await 的区别
    三者在事件循环中的是不同的,事件循环中分为宏任务队列和微任务队列 其中setTimeout的回调函数放到宏任务队列里,等到执行栈清空以后执行;promise.then里的回调函数会放到相应宏任务的微任务队列里,等宏任务里面的同步代码执行完再执行;async函数表示函数里面可能会有异步方法,a......
  • fastjson 1.2.24 反序列化漏洞(审计分析)
    环境JDK8u181Fastjson1.2.24POC跟进parse方法跟进到底层deserialze方法Poc中传入的dataSourceName:ldap://192.168.3.229:8084/vnSYPYwMs值这里实际对应setDataSourceName方法,调用此方法并传入ldap跟进setDataSourceName方法,这里只是简单赋值 步出......
  • TypeScript:函数兼容性问题
    函数兼容性大家在JS中经常可以看到这样的代码:lisr.forEach((item)=>{});lisr.forEach((item,index)=>{});就是()的参数有时是可以省略的,而这个正式函数的兼容性性质。说白了就是:多的函数=少的函数;参数少的函数可以赋值给参数多的举个下面例子:typeFun1=(num1......
  • jmeter接口关联,json提取器多个变量提取
    正则表达式提示单个变量 调用${boxTypeId}json提取器多变量提取  调用 请求数据  响应结果  ......
  • oracle的decode函数实现行转列
    目录oracle的decode函数实现行转列1、decode函数语法2、示例2.1、数据库数据2.2、需求oracle的decode函数实现行转列1、decode函数语法decode(字段,所匹配的值,列所显示的值)2、示例2.1、数据库数据有一个学生表:sys_stu,字段有学生id:stu_id,学生名称:stu_name,学生科目:stu_......
  • vue通过Export2Excel.js进行导入excel,获取数据
    <!--封装的模板下载和导入按钮和功能组件--><template><spanstyle="margin-left:10px"><el-buttonsize="mini"class="el-icon-download"@click="downFiles">下载模板</el-button><el-upload......
  • dbg 寻找main函数
    方法一,3个push和堆栈平衡设置函数入口设断点,打开程序到达断点后,一直按F8运行到类似下面的地方,F7步进查看是否是main函数。pushedipushesipushdwordptrds:[eax]callproject1.D31040addesp,C如上,因为main函数的参数是3个,所以,在调用main函数之前一定会有3个参数入栈。调用m......
  • python 正则处理字符串,使用函数
    """在正则截取的字符子串基础上,处理字符串Python的re模块提供了re.sub用于替换字符串中的匹配项。语法:re.sub(pattern,repl,string,count=0,flags=0)参数:pattern:正则中的模式字符串。repl:替换的字符串,也可为一个函数。string:要被查找替换的原始字符串。cou......
  • python3 多继承时,父类有相同一个函数的选择
    classPeople:name=''age=0__weight=0def__init__(self,name,age,weight):print("People初始化")self.age=ageself.name=nameself.__weight=weightprint("People......