js几种常见的递归方法

js几种常见的递归方法

递归的概念:就是函数调用函数本身,或者在自己函数调用的下级调用函数自己;

  1. 案例1:求和,1-100
        function sun(n){
            if(n==1) return 1
            
        }
    
  2. 案例2:递归方法1,1,2,3,5,8,13,21,34,55,89…求第 n 项
       function fib(n) {
            if (n === 1 || n === 2) return 1
            return fib(n - 2) + fib(n - 1)
        }
        console.log(fib(3)) 
    
  3. 案例3:深拷贝
        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
        }
    
  4. 案例4:递归组件
    • 组件在它的模板内可以递归的调用自己,只要给组件设置 name 组件就可以了。
    • 不过需要注意的是,必须给一个条件来限制数量,否则会抛出错误: max stack size exceeded
    • 组件递归用来开发一些具体有未知层级关系的独立组件。比如:联级选择器和树形控件
        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
        }
    

hash模式和history模式

  1. 这里的hash指的就是url后的 # 号以及后面的支付,比如说:www.baidu.com/#hashhash,其中#hashhash 就是我们期望的 hash值,
    由于hash值的变化不会导致浏览器向服务器发送请求,而且在hash的改变会触发hashchange事件,浏览器的前进后退也能对其进行控制,所以在H5的history模式出现之前,基本都是使用hash模式来实现前端路由,代码如下
        window.addEventListener('hashchange',function(event){
            let newUrl=event.newURL;//hash改变后的新的URL
            let loadUrl=event.oldURL;//hash改变前的URL
        })
    
  2. history模式,以下是history的相关API:
        history.go(-1);       // 后退一页
        history.go(2);        // 前进两页
        history.forward();     // 前进一页
        history.back();      // 后退一页
        //规范新增
        history.pushState();         // 添加新的状态到历史状态栈
        history.replaceState();      // 用新的状态代替当前状态
        history.state                // 返回当前状态对象
    

推荐文章:https://juejin.im/post/5dae6ba1f265da5b981a8f5e

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 归是一种编程技巧,其中一个函数调用自身。在 JavaScript 中,方法可以用来解决复杂的问题,并使代码更简洁易读。 归的基本模型包括以下几个步骤: 1. 定义归终止条件:当归达到一定的深度时,必须终止归。 2. 分治:将问题分解为规模更小的子问题。 3. 调用自身:通过解决子问题来解决整个问题。 4. 记录结果:在归的过程中,记录每一步的结果。 下面是一个简单的归例子,计算阶乘: ``` function factorial(n) { if (n === 0) { return 1; } return n * factorial(n - 1); } ``` 在这个例子中,归终止条件是 `n` 为 0,分治的子问题是计算 `n-1` 的阶乘,调用自身的方式是通过函数 `factorial` 调用,并将计算结果返回。 ### 回答2: 归是一种在编程中常见的技巧,特别在JavaScript中,方法经常被用来解决问题。归是指一个函数调用自身的过程。下面是关于JavaScript方法的一些重要信息: 1. 方法必须包含一个终止条件,否则函数将无限地调用自身。这个终止条件通常是某个特定条件的判断,一旦满足了该条件,归将停止。 2. 方法必须能够将问题分解为更小的子问题,同时保持问题的解决方案是相同的。 3. 方法可以方便地解决一些复杂的问题,例如树和图的遍历,阶乘计算等。 4. 使用方法时需要小心,因为它可能会导致性能问题。归过程中使用大量的函数调用,可能导致堆栈溢出。 5. 尽管方法可以让代码更简洁和易于理解,但在某些情况下,使用循环可能更高效和可维护。因此,在选择使用方法之前,需要仔细权衡。 总的来说,JavaScript的方法是一种强大而灵活的编程技巧,可以解决各种问题。但在使用时需要注意终止条件和性能问题,以确保代码的正确性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值