递归的概念

就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己。

递归的步骤

  1. 假设递归函数已经写好
  2. 寻找递推关系
  3. 将递推关系的结构转换为递归体
  4. 将临界条件加入到递归体中

经典案例 1: 求和

求 1-100 的和

function sum(n) {if (n == 1) return 1return sum(n - 1) + n
}

经典案例 2: 斐波拉契数列

0,1,2,3,5,8,13,21,34,55,89...求第 n 项

// 递归方法
function fib(n) {if (n === 1 || n === 2) return n - 1return fib(n - 1) + fib(n - 2)
}
console.log(fib(10)) // 34
//非递归方法 //
function fib(n) {let a = 0let b = 1let c = a + bfor (let i = 3; i < n; i++) {a = bb = cc = a + b}return c
}
console.log(fib(10)) // 34

经典案例 3: 爬楼梯

JS 递归 假如楼梯有 n 个台阶,每次可以走 1 个或 2 个台阶,请问走完这 n 个台阶有几种走法

function climbStairs(n) {if (n == 1) return 1if (n == 2) return 2return climbStairs(n - 1) + climbStairs(n - 2)
}

经典案例 4: 深拷贝

原理: clone(o) = new Object; 返回一个对象

function clone(o) {var temp = {}for (var key in o) {if (typeof o[key] == 'object') {temp[key] = clone(o[key])} else {temp[key] = o[key]}}return temp
}

经典案例 5:递归组件

  • 递归组件: 组件在它的模板内可以递归的调用自己,只要给组件设置 name 组件就可以了。
  • 不过需要注意的是,必须给一个条件来限制数量,否则会抛出错误: max stack size exceeded
  • 组件递归用来开发一些具体有未知层级关系的独立组件。比如:联级选择器和树形控件
<template><div v-for="(item,index) in treeArr"> {{index}} <br/><tree :item="item.arr" v-if="item.flag"></tree></div>
</template>
<script>
export default {// 必须定义name,组件内部才能递归调用name: 'tree',data(){return {}},// 接收外部传入的值props: {item: {type:Array,default: ()=>[]}}
}
</script>

几种常见的JS递归算法相关推荐

  1. js中一种常见条件判断if(var)的坑

    在处理js代码判断真假时经常会这么写. //从某个地方获取的值. var vale = fun(......... );if(!value){进入这里表示value的布尔值为false } 我们知道, ...

  2. 四种常见的浏览器内核简介----JS城市选择控件

    一 四种常见的浏览器内核简介 Gecko: Gecko: Netscape6开始采用的内核,后来的Mozilla FireFox (火狐浏览器) 也采用了该内核,Gecko的特点是代码完全公开,因此, ...

  3. 使用CSS替代JS实现几种常见的特效

    本文介绍用CSS代替JS来实现我们页面中所需要的几种常见效果.包括导航高亮,下拉菜单等. 1. 导航高亮      导航高亮是一种很常见的问题,包括当前页面的导航在菜单里面高亮和hover时高亮.你可 ...

  4. html怎么创建数组,js创建数组的三种方法 JS数组去重的几种常见方法

    JS数组有哪几种定义方式? js 里创建一个数组 那几种方式有什么区别吗?a = new Array(); b = []; 性能问题吗?? function clear(arr) { // 1 如何获 ...

  5. JS几种常见的用户名检测

    本博客主要讲述关于JS的几种常见的用户名检测.包括 一.不能以数字开头–isNaN() // isNaN 是一个系统的函数,用于判断一个变量是否为 NaN //strings指的是要判断对象 //st ...

  6. js几种常见的递归方法

    js几种常见的递归方法 递归的概念:就是函数调用函数本身,或者在自己函数调用的下级调用函数自己: 案例1:求和,1-100 function sun(n){if(n==1) return 1} 案例2 ...

  7. JS中4种常见的内存泄漏

    一.什么是内存泄漏 本质上讲,内存泄漏是当一块内存不再被应用程序使用的时候,由于某种原因,这块内存没有返还给操作系统或空闲内存池的现象. 二.几种常见的内存泄漏 1.意外的全局变量 一个未声明变量的引 ...

  8. js内存泄漏的几种常见情况

    内存泄漏 内存泄漏是指不再用到的内存,没有及时释放.既不能使用,又不能回收. 导致内存泄漏的几种常见情况 1.意外形成全局变量 解决方法:加上 'use strict' 启用严格模式来避免这类问题, ...

  9. Ajax 和 XML: 五种常见 Ajax 模式

    Asynchronous JavaScript + XML(Ajax)无疑是 2006 年最热门的技术术语,且有望在 2007 得到进一步发展.但是对您的应用程序来说它究竟有什么意义呢?Ajax 应用 ...

最新文章

  1. 使用who.is查域名DNS信息以及用sameip.org查其他网站
  2. 维基解密揭秘CIA五种恶意软件用法
  3. 函数幂计算机中怎么用,Excel中幂函数的操作使用
  4. boost::fusion::single_view用法的测试程序
  5. Oracle 数字与空值的排序问题
  6. java整合flex
  7. 学习笔记3-C语言-基础
  8. php购物车内物品删除,求助 购物车 用session删除 列表的一条
  9. 怎么把php网站变灰,CSS效果,让网站全部变成灰色(黑白)
  10. 苏宁公布双11战报:全渠道订单量增长76% 物流发货完成率达99.6%
  11. mysql for 循环删除_Java增强for循环中删除元素抛异常问题
  12. Spring beans配置方案(二) 学习笔记
  13. 《深海探测装备》学习笔记1(深海探测传感器)
  14. 李飞飞创建ImageNet的基本逻辑
  15. Eclipse中没有Servers或Dynamic Web Project的解决方案
  16. C. Petya and Inequiations
  17. 元宇宙NFT最近最火的项目,该如何选择平台呢
  18. Mac切换docker镜像源
  19. SPP、ASPP与PPM
  20. 南非SABS EMC CoC简介

热门文章

  1. 数字图像处理MATLAB学习笔记(五)
  2. CodeForces - 1244E
  3. LoRa学习:SX127x芯片数字IO引脚映射
  4. 用python语言写小程序_小程序用什么语言开发?python语言开发可以开发吗?
  5. 基于联邦学习中毒攻击的防御策略
  6. 《他乡的童年》观后感——英国教育
  7. 2.19 校验码的概念
  8. 八个常见Java项目,献给初学编程的你!
  9. 【小沐学NLP】Python实现聊天机器人(ALICE)
  10. nginx安装配置 linux