js递归理解及使用案例
递归在平时开发中会经常用到,递归是一种编程技巧,采取函数调用函数自身的方式工作
下面是递归的特点以及使用案例
一、递归是什么?
递归通俗地讲就是函数自己调用自己,它具有以下三要素
1、一个问题可以分解为更小的问题用同样的方法解决
2、分解后的子问题求解方式一样,不同的是数据规模变小
3、存在递归终止条件
下面看看递归解决实际问题的案例
二、使用案例
1.求1-100的和
//第n项的和 sum(n) = sum(n-1)+n 终止条件n=1
function sum(n){if(n==1) return 1return sum(n-1) + n
}
let amount = sum(100)
console.log(amount) // 5050
2.求一个数组前n项的和
function arrsum(arr,n){if(n==1) return arr[0]return arrsum(arr,n-1) + arr[n-1]
}
const arrs = [1,3,4,5,7]
console.log(arrsum(arrs,1)) // 1
console.log(arrsum(arrs,2)) // 4
3.小明入职第一年月薪是10k,涨幅每年是8%,那么20年后他的月薪是多少
// n年后薪资是fn(n) = fn(n-1)*(1+0.08)function fn(n){if(n==1) return 100000return fn(n-1)*(1+0.08)
}
let wages = fn(10)
console.log(wages) // 199900.46
console.log(fn(2)) // 两年后月薪108000
4.斐波那切数列(又称黄金分割数列\兔子数列)
//1、1、2、3、5、8、13、21、34.....
//规律:自身等于前两项之和;
//(n-1)+(n-2)=nfunction fibonacci(n){if(n<=2){return 1}return fibonacci(n-1)+fibonacci(n-2)}console.log(fibonacci(6)) // 8
5. 一元钱可以买一瓶水,两个空瓶可以换一瓶水,三个瓶盖可以换一瓶水,10块钱可以换多少瓶水,30块钱又可以买多少瓶水
// 借鉴思路;1元 1瓶 // 2元 5瓶 // 3元 11瓶 // 4元 17瓶 // 5元 23瓶 function water(n){if(n==1){return 1}else if(n==2){return 5}else{return water(n-1) +6}
}
console.log(water(10)) //53
console.log(water(30)) //173
总结
递归在开发中用途广泛,除了以上情况,还有其他很多用途,比如vue后台开发系统中,侧边栏的渲染用到递归,还有一些数据不知道层级的情况会使用递归,比如定义递归组件等等
js递归理解及使用案例相关推荐
- JS实现验证码倒计时验证案例
JS实现验证码倒计时验证案例 前言 验证案例 1.代码 2.代码功能解析 1.验证码 2.验证 3.倒计时 总结 前言 这是一个将验证和倒计时综合起来的案例,案例也不难理解,在页面的设计中,需要这样的 ...
- # vue.js 之 对vue.js基础理解
vue.js 之 对vue.js基础理解 Vue构造器 1 . Vue.js是一个构造函数,编程中称之为构造器 2 . 每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3 ...
- 二叉树---树的深度递归理解
int Dep(Bianary *root) {if (root == NULL){return 0;}int depth = 0;int leftD = Dep(root->lchild);i ...
- java 0xf0_java 中类似js encodeURIComponent 函数的实现案例
我就废话不多说了,大家还是直接看代码吧~ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import ...
- js点击复制文本 - 案例篇
文章目录 js点击复制文本 :代码+效果图 效果图 · 示下: html 代码如下: 注意代码: 附:[javascript监听键盘事件 - 如表单enter回车提交](https://blog.cs ...
- js递归性能影响及解决方案
js递归性能影响及解决方案 参考文章: (1)js递归性能影响及解决方案 (2)https://www.cnblogs.com/muzs/p/9843405.html (3)https://www.j ...
- html标签outclick,vue自定义指令(Directive中的clickoutside.js)的理解
阅读目录 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: 一般在需要 DOM 操作时我们都需要使用自定义指令的方式去实现,当然一些特殊的事件监听也可以使用指令,例 ...
- js实现学生信息表案例--详细教程
目录 一.页面展示 二.代码分析 三. 全部代码 一.页面展示 二.代码分析 html和css的样式 属于基本操作,分析只讲 js开始 说明: 这个案例,减少了dom操作,采取操作数据的形式,增加和删 ...
- d3.js一个面积图的案例(包含brush与zoom)
d3.js 一个面积图的案例(包含brush与zoom) 参考链接:http://www.a4z.cn/pui/ant-admin.html#/simple-area-chart const rawD ...
最新文章
- pd.read_csv读取txt时整型变成浮点型问题解决
- spring手动控制事务开启_Spring 基于AOP的事务控制
- spring boot 表单的实体提交错误:Validation failed for object='book'. Error count: 2
- 第四范式团队KDD Cup世界冠军方案详解:解密共享出行场景中的优化问题
- JS 无法清除Cookie的解决方法
- JDBC链接SQLServer2005 Express
- mysql 客户服务号_mysql客户端及服务端常用实用工具功能总结
- 工作中的沟通及信息传递
- ggplot2 | 位置调整函数
- Win11 不支持移动任务栏位置;苹果将推出更大尺寸的 iPad Pro;iOS 15 更新 Beta2 版本|极客头条...
- 网上支付失败了我该怎么办
- 四大组件之Service(服务)
- [RK3288][Android6.0] Audio录音HAL层的数据读取流程分析
- 再见PanDownload ,下一个已经来了。
- 关闭联通游戏代扣费的功能
- getReader() has already been called for this request
- 抓住汽车消费红利 车载软件开发 让旅途更美好
- mysql meb备份_MySQL的企业备份(MEB)
- 注册表编辑器厘米爱你找不到mysql_我打开注册表编辑器后 找不到那几个文件 怎么办...
- 第十五章 使用PyQt进行Python图形界面程序开发
热门文章
- google大数据三大论文-中文版-英文版
- sqlplus 命令简单整理
- 中国ORC低温余热发电系统市场深度调研报告(2023版)
- 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结...
- 基于视频的电熔镁炉工况识别系统→6.电熔镁炉服务器设计
- 程序员小灰——谷歌面试题之高楼扔鸡蛋问题
- 菜圈的codewars(一),codewars的注册
- 【小沐学Android】Android手机上基于Termux实现Web服务器(Python、node.js、C/C++)
- selenium常用的浏览器窗口操作
- 如何使用 PowerShell 锁定、解锁、启用和禁用 AD 帐户