浅谈javascript递归(白话版)

递归

递归是一种解决问题的方法,通常我们可以理解成函数调用自身;

什么递归?递归怎么写?

首先直接调用自身的方法和函数,他是一个递归,我们看代码:
复制代码
var recursiveFun = function(params){recursiveFun(params);
}
// or
var recursiveFun1 = function(params){recursiveFun2(params);
}
var recursiveFun2 = function(params){recursiveFun1(params);
}
复制代码

假设现在我们要执行recursiveFun() or recursiveFun1(); 从上面函数,我们能知道他会一直重复调用;因此,每个递归函数都需要有边界条件,我们通俗一点,可以叫它停止点,作用是为了防止无限递归。

如果防止递归停止,无限递归带来的问题

我们先思考一个问题,如果忘记加上停止递归函数的边界条件,会发生什么呢? 会一直执行函数吗?

答案是不会,递归并不会无限的执行下去,浏览器会抛出错误,也就是所谓的栈溢出错误;我们可以通过以下代码来测试:

var i = 0;
var recursiveFun = function(){i++;recursiveFun();
}
try {recursiveFun();
} catch (err) {console.log(`i=${i}error:${err}`) 
}
复制代码

以上是运行结果,从图中我们能看出在执行15661次后浏览器给我们抛出了错误:RangeError: Maximum call stack size exceeded; 超过最大调用栈大小; 我们如何停止递归呢;我们只需要加一个条件即可;假设我们条件是当i累加到100的时候停止。代码如下:

var i = 0;
var recursiveFun = function(){if (i > 100) return;i++;recursiveFun();
}
try {recursiveFun();
} catch (err) {console.log(`i=${i}error:${err}`) 
}
复制代码

总结

我们得到一个结论,具有停止递归的边界条件很重要;

转载于:https://juejin.im/post/5cb02d15f265da03b8583fd3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超链接禁用_如何在Microsoft Word中禁用超链接

超链接禁用When you type a web or email address in Word, you may notice that the program automatically formats it as a live hyperlink. This is a setting in Word’s AutoFormat feature that is on by default but can be easily turned off. 当您在Word中键入网站或…

ssh面试题总结

题目1:Hibernate工作原理及为什么要用? 原理: hibernate,通过对jdbc进行封装,对 java类和 关系数据库进行mapping,实现了对关系数据库的面向对象方式的操作,改变了传统的jdbc sql操作数据的方式…

SaltStack的salt-ssh使用及LAMP状态设计部署

SaltStack的salt-ssh使用及LAMP状态设计部署 1、salt-ssh的使用 官方文档:https://docs.saltstack.com/en/2016.11/topics/ssh/index.html (1)安装salt-ssh [rootlinux-node1 ~]# yum install -y salt-ssh(2)配置salt-…

程序员笔记(知识)管理的一点经验

记笔记这件事,也许在很多人看来,再普通、简单不过了——从小老师就教育我们要这么做。不同的人有不同的方式,我们最终的目的,还是希望不要停留在只是记录这一层面上,而是将它们转变为我们的知识。作为一个程序员&#…

xbox可以录视频声音吗_什么是Xbox Live Gold,它值得吗?

xbox可以录视频声音吗If you have an Xbox One or Xbox 360, Microsoft’s Xbox Live Gold service is required to play multiplayer games online. A subscription costs $10 per month or $60 per year. Xbox Live Gold also includes additional benefits, like free games…

windows - mysql

Windows:(mysql)操作:0.下载安装mysql www.mysql.org downloads community 5.7.21 下载5.6 Microsoft Windows 解压到C: C:\mysql-5.6.39-winx64 C:\mysql-5.6.39-winx64\bin bin/mysql 客户端 bin/mysqld 服务端 设置环境变量: …

显示器选三星还是飞利浦_如何为飞利浦色相灯设置计时器

显示器选三星还是飞利浦Maybe you want to turn off your Philips Hue lights after a certain amount of time has passed, or have them blink as a reminder. Whatever your needs, here’s how to set a timer for your Philips Hue lights to have them automatically tur…

PIE SDK与OpenCV结合说明文档

1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C 类构成,同时提供了Python、Ruby、MATLAB等语言的接口&…

js的栈堆与浅拷贝、深拷贝的理解

一:什么是堆栈? 我们都知道:在计算机领域中,堆栈是两种数据结构,它们只能在一端(称为栈顶(top))对数据项进行插入和删除。 堆:队列优先,先进先出;由操作系统自动分配释放 ,存放函数的…

python面向对象基础语言进阶

在此感谢前辈们的指导:http://python.jobbole.com/80955/ https://www.cnblogs.com/wupeiqi/p/4766801.htmlhttps://www.cnblogs.com/paomaliuju/p/5122761.html https://www.cnblogs.com/goser/articles/7097728.html http://www.cnblogs.com/alex3714/articles/52…

ea 备份码是什么_EA的原始访问是什么,值得吗?

ea 备份码是什么EA’s Origin Access gives you access to more than 70 games, discounts, and new EA games before they’re released for a monthly (or yearly) subscription fee. But is it really worth it? EA的Origin Access可让您访问70多种游戏,打折游戏…

Https 加密原理分析

众所周知,HTTP 协议通过明文传输,是不安全的。于是,就在 HTTP 协议的基础上,进行了数据加密,也就诞生了 HTTPS 协议。注意,HTTPS 并不是一个新的协议,它只不过是在 HTTP 的基础上加了一层 TLS (…

JS框架_(JQuery.js)纯css3进度条动画

百度云盘  传送门  密码&#xff1a;wirc 进度条动画效果&#xff1a; <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1">…

如何在Android主屏幕上添加热点快捷方式

Portable Wi-Fi hotspots on your Android phone are great, because hotel Wi-Fi usually isn’t, but toggling that hotspot on and off is a pain. Here are several easy ways to add a hotspot widget to your home screen. 您的Android手机上的便携式Wi-Fi热点很棒&…

提高关键词排名的28个SEO技巧

28个让关键词排名明显改观的SEO技巧&#xff1a; 关键词位置、密度、处理 URL中出现关键词&#xff08;英文&#xff09; 网页标题中出现关键词&#xff08;1-3个&#xff09; 关键词标签中出现关键词&#xff08;1-3个&#xff09; 描述标签中出现关键词&#xff08;主关键…

SQLI DUMB SERIES-16

&#xff08;1&#xff09;无论怎么输入&#xff0c;都没有回显&#xff0c;但当输入 admin")#时&#xff0c;显示登录成功。若通过其他方法获取数据库的用户名&#xff0c;可通过这个方法登录成功。 &#xff08;2&#xff09;获取其他信息可用考虑时间延迟注入。方法同1…

如何在YouTube视频上禁用注释

YouTube has that betcha-can’t-watch-just-one appeal to it, which is why YouTube’s annoyances become so pronounced the more you use it. Many of these features, such as annotations can be permanently disabled, making for a more enjoyable viewing experience…

Linux目录配置及应放置的内容

Linux目录配置及应放置的内容 /bin&#xff1a;系统有很多放置执行文件的目录&#xff0c;但/bin比较特殊。因为/bin放置的是在用户维护模式下还能够被操作的命令。在/bin下面的命令可以被root与一般账号所使用&#xff0c;主要有cat,chmod,chown,date,mv,mkdir,cp,bash等常用命…

快速实现一个Http回调组件

2019独角兽企业重金招聘Python工程师标准>>> 快速实现一个Http回调组件 一、前情回顾 ​ 我们平时在使用一些库的时候&#xff0c;会遇到一些看起来很舒服的写法&#xff0c;用起来感觉很简单&#xff0c;而且写法也很优雅&#xff0c;比如OkHttp&#xff0c;或者是…

MyBatis缓存通俗易懂

1.1 mybatis缓存介绍 如下图&#xff0c;是mybatis一级缓存和二级缓存的区别图解&#xff1a; Mybatis一级缓存的作用域是同一个SqlSession&#xff0c;在同一个sqlSession中两次执行相同的sql语句&#xff0c;第一次执行完毕会将数据库中查询的数据写到缓存&#xff08;内…