递归在平时开发中会经常用到,递归是一种编程技巧,采取函数调用函数自身的方式工作

下面是递归的特点以及使用案例

一、递归是什么?

递归通俗地讲就是函数自己调用自己,它具有以下三要素

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递归理解及使用案例相关推荐

  1. JS实现验证码倒计时验证案例

    JS实现验证码倒计时验证案例 前言 验证案例 1.代码 2.代码功能解析 1.验证码 2.验证 3.倒计时 总结 前言 这是一个将验证和倒计时综合起来的案例,案例也不难理解,在页面的设计中,需要这样的 ...

  2. # vue.js 之 对vue.js基础理解

    vue.js 之 对vue.js基础理解 Vue构造器 1 . Vue.js是一个构造函数,编程中称之为构造器 2 . 每一个new Vue() 都是一个Vue构造函数的实例,这个过程叫做实例化 3 ...

  3. 二叉树---树的深度递归理解

    int Dep(Bianary *root) {if (root == NULL){return 0;}int depth = 0;int leftD = Dep(root->lchild);i ...

  4. java 0xf0_java 中类似js encodeURIComponent 函数的实现案例

    我就废话不多说了,大家还是直接看代码吧~ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import ...

  5. js点击复制文本 - 案例篇

    文章目录 js点击复制文本 :代码+效果图 效果图 · 示下: html 代码如下: 注意代码: 附:[javascript监听键盘事件 - 如表单enter回车提交](https://blog.cs ...

  6. js递归性能影响及解决方案

    js递归性能影响及解决方案 参考文章: (1)js递归性能影响及解决方案 (2)https://www.cnblogs.com/muzs/p/9843405.html (3)https://www.j ...

  7. html标签outclick,vue自定义指令(Directive中的clickoutside.js)的理解

    阅读目录 vue自定义指令clickoutside.js的理解 vue自定义指令请看如下博客: 一般在需要 DOM 操作时我们都需要使用自定义指令的方式去实现,当然一些特殊的事件监听也可以使用指令,例 ...

  8. js实现学生信息表案例--详细教程

    目录 一.页面展示 二.代码分析 三. 全部代码 一.页面展示 二.代码分析 html和css的样式 属于基本操作,分析只讲 js开始 说明: 这个案例,减少了dom操作,采取操作数据的形式,增加和删 ...

  9. d3.js一个面积图的案例(包含brush与zoom)

    d3.js 一个面积图的案例(包含brush与zoom) 参考链接:http://www.a4z.cn/pui/ant-admin.html#/simple-area-chart const rawD ...

最新文章

  1. pd.read_csv读取txt时整型变成浮点型问题解决
  2. spring手动控制事务开启_Spring 基于AOP的事务控制
  3. spring boot 表单的实体提交错误:Validation failed for object='book'. Error count: 2
  4. 第四范式团队KDD Cup世界冠军方案详解:解密共享出行场景中的优化问题
  5. JS 无法清除Cookie的解决方法
  6. JDBC链接SQLServer2005 Express
  7. mysql 客户服务号_mysql客户端及服务端常用实用工具功能总结
  8. 工作中的沟通及信息传递
  9. ggplot2 | 位置调整函数
  10. Win11 不支持移动任务栏位置;苹果将推出更大尺寸的 iPad Pro;iOS 15 更新 Beta2 版本|极客头条...
  11. 网上支付失败了我该怎么办
  12. 四大组件之Service(服务)
  13. [RK3288][Android6.0] Audio录音HAL层的数据读取流程分析
  14. 再见PanDownload ,下一个已经来了。
  15. 关闭联通游戏代扣费的功能
  16. getReader() has already been called for this request
  17. 抓住汽车消费红利 车载软件开发 让旅途更美好
  18. mysql meb备份_MySQL的企业备份(MEB)
  19. 注册表编辑器厘米爱你找不到mysql_我打开注册表编辑器后 找不到那几个文件 怎么办...
  20. 第十五章 使用PyQt进行Python图形界面程序开发

热门文章

  1. google大数据三大论文-中文版-英文版
  2. sqlplus 命令简单整理
  3. 中国ORC低温余热发电系统市场深度调研报告(2023版)
  4. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇一:WPF常用知识以及本项目设计总结...
  5. 基于视频的电熔镁炉工况识别系统→6.电熔镁炉服务器设计
  6. 程序员小灰——谷歌面试题之高楼扔鸡蛋问题
  7. 菜圈的codewars(一),codewars的注册
  8. 【小沐学Android】Android手机上基于Termux实现Web服务器(Python、node.js、C/C++)
  9. selenium常用的浏览器窗口操作
  10. 如何使用 PowerShell 锁定、解锁、启用和禁用 AD 帐户