JavaScript实现递归算法的方法介绍

本篇文章给大家带来的内容是关于javascript实现递归算法的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

我们先来看一下定义。递归算法,是将问题转化为规模缩小的同类问题的子问题,每一个子问题都用一个同样的算法去解决。一般来说,一个递归算法就是函数调用自身去解决它的子问题。

  递归算法的特点:

在函数过程中调用自身。在递归过程中,必须有一个明确的条件判断递归的结束,既递归出口。递归算法简洁但效率低,通常不作为推荐算法。

  上面这些是百度百科的解释,讲的也是十分明确,大家配合实例来细细琢磨。

  阶乘

立即学习“Java免费学习笔记(深入)”;

  问题描述: n! = n*(n-1)*…2*1

  代码实现:

下载.png

  我们拿到问题的时候,我们按照定义的说明,可以先将规模缩小到同类的子问题。比如,n! 是等于 n* (n-1)!,然后(n-1)! = (n-1)*(n-2)!。这样依次往下推,直到if的出口。这里用了arguments.callee,是为了防止函数名的紧密耦合,在这里它等同于factorial(n-1)。函数实现起来是不是简洁明了呢。当然因为问题规模简单,其实用循环也是可以实现的,大家可以尝试一下。

斐波那契数列

  问题描述:1, 1, 2, 3, 5, 8, 13, 21, 34, ……. 求第n个数是多少。

  代码实现:

  下载 (1).png

  其实用刚才的想法实现,也是非常的简单的。通过分析可以得到第n个数,是前两个数的和,通过这个我们就可以通过递归,不断获得所需要的前两个数,直到n

  走楼梯问题

  问题描述:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶或者3阶,计算共有多少种不同的走法。

  代码实现:

  下载 (2).png

  这其实就是一个斐波那契数列的一种实现。我们分析的时候,可以转化成小规模的子类问题。当到达指定阶梯的最后一步的时候,可以有三种种情况,一是上一步,二是上两步,三是上三步。所以总的方法是F(n) = F(n-1) + F(n-2) + F(n-3)。然后自然就成了各自的小计算,不断循环下去,直到判断条件的发生。

  最大公约数

  问题描述:给两个数,如果两个数相等,最大公约数是其本身。如果不等,取两个数相减的绝对值和两个数中最小的数比较,相等则为最大公约,不等则继续上面的算法,直到相等。

  代码实现:

  下载 (3).png

  没什么好说的,照问题描述所要求的实现就可以了。递归的出口便在于a等于b。

 汉诺塔

  问题描述:大家都或多或少的玩过,这里就不再赘述了。

  代码实现:

  下载 (4).png

  在我没有体会到递归的精粹前,我对这个问题简直百思不得其解。我一直问自己,我怎么知道下一个该去哪里?后来,我就知道,我其实更关心的是,最后那一个该怎么走。这个怎么说呢?我们可以从头想起,我们如果只有1个盘,我们可以让它到C柱,也可以到B柱。自然两个盘,也可以实现。3个盘,也是可以的吧。那我们就讲4个盘的情况。4个盘要完成就要将A上的圆盘,完全转移到C上。我们把前3个盘当作一个整体放到B上,然后第4个盘就可以到C上了,然后我们再将前三个放到C上,就成功了。那前三个盘,又可以重新当作一个新游戏,让前两个盘,当一个整体,依次类推。这样我们只需要关心大的整体的事,其它的就转成小规模问题解决就好了。

     二分法快排

  问题描述:使用二分法,对一个数组进行由小到大的排序。

  代码实现:

  下载 (5).png

嗯…第二次写这东西啦。这一次对递归的实现也是比上次清晰很多了。其实也是将大规模化为小规模,关心一个大整体,让其不断化为小规模进行计算。具体可以去原来那篇随笔进行查看。

DOM树的递归

问题描述:获取一个节点的所有父节点的tagName

代码实现:

  下载 (6).png

大概都能看懂就不说什么啦。相比之前的汉诺塔和快排什么的,这个还是挺简单的了,但是最接近我们JavaScript的实际应用。

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!

以上就是JavaScript实现递归算法的方法介绍的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2732104.html

(0)
上一篇 2025年3月8日 00:38:01
下一篇 2025年2月22日 17:03:08

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • jQuery的用法介绍(代码)

    本篇文章给大家带来的内容是关于jQuery的用法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 代码部分 window.jQuery=function(nodeOrSelector){ let nodes={}…

    编程技术 2025年3月8日
    200
  • promise是什么?怎么用?

    本篇文章给大家带来的内容是关于Laravel多态关联的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 promise是什么 官网解释 promise 表示一个异步操作的最终结果。 翻译  ==可以将promi…

    编程技术 2025年3月8日
    200
  • vue中axios请求的封装的介绍(代码)

    本篇文章给大家带来的内容是关于vue中axios请求的封装的介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、发送请求模块目录 2、/api/url中存放的是每个模块的URL // 商品模块 product.…

    2025年3月8日
    200
  • 如何更新JavaScript中的cookie?(代码示例)

    实际上,更新cookie与替换cookie略有不同,因为我们想在cookie中放入的新值在某种程度上取决于cookie是否已经存在,如果存在,则取决于它包含什么。这意味着我们需要先读取现有的cookie,然后才能为其编写替换。 需要注意的一…

    2025年3月8日
    200
  • indexedDB存储的代码示例

    本篇文章给大家带来的内容是关于indexeddb存储的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 indexedDB(浏览器本地存储数据库)IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和…

    编程技术 2025年3月8日
    200
  • apply() 和 call() 方法有什么作用?

    本篇文章给大家带来的内容是关于apply() 和 call() 方法有什么作用?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 每个函数都包含两个非继承而来的方法:apply()和call()。;call与apply都属于F…

    编程技术 2025年3月8日
    200
  • Javascript分号规则的知识介绍(附示例)

    本篇文章给大家带来的内容是关于javascript分号规则的知识介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 花点时间搞清楚JS中的分号规则吧~~~不管你喜欢结尾带分号或省略分号的模式 分号允许的场景 分号…

    编程技术 2025年3月8日
    200
  • JavaScript中AMD和ES6模块导入导出的比较(代码示例)

    本篇文章给大家带来的内容是关于javascript中amd和es6模块导入导出的比较(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 我们前端在开发过程中经常会遇到导入导出功能,在导入时,有时候是require,…

    编程技术 2025年3月8日
    200
  • JavaScript中比较运算符隐式类型转换的介绍(附示例)

    本篇文章给大家带来的内容是关于javascript中比较运算符隐式类型转换的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 相信大家在代码中经常看见 ‘==’ 和 ‘===…

    编程技术 2025年3月8日
    200
  • 前端JavaScript写Excel的代码示例

    本篇文章给大家带来的内容是关于前端javascript写excel的代码示例,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前端如何才能写excel,其实也是比较简单的,只是没有接触这一块,当然这边讲的只是简单的入门。这边…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论