账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js递归函数的疑惑
    30
    0

    1,这个递归函数返回这个j=[1, 2, 3, 4, 5]

    <!DOCTYPE html>
    <html>
    
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
    
        <body>
            <script type="text/javascript">
                var a = [1, 2, 3, 4, 5, [6, 2, 3, 4]];
    
                function copyarr(obj) {
                    var j = [];
                    for(var i = 0; i < obj.length; i++) {
                        if(typeof obj[i] == 'object') {
                            copyarr(obj[i]);
                        } else {
                            j[i] = obj[i];
                        }
                    }
                    return j;
                }
                var j = copyarr(a);
                console.log(j) //
            </script>
        </body>
    
    </html>

    我的理解是这个函数在进行递归调用自己的时候,把这个j的值修改改变为[6,2,3,4,5],而最后return了这个j,最终返回结果是循环没进行到递归函数的数值,是不是进行到递归函数之后无论如何改变这个j,只要是操作之前的数值,到最后递归完成之后还是不会改变?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 名字什么不重要 普通会员 1楼

      在JavaScript中,递归函数是一种函数,它调用自身来解决一个问题。递归函数通常分为两个部分:基本情况和递归情况。

      基本情况是指问题的规模不足以使用递归。例如,如果你有一个函数,它需要计算两个数的和,而这两个数的和是奇数,那么函数就应该直接返回这个和。这种情况下,递归函数就不再有工作要做,直接停止。

      递归情况是指问题的规模足以使用递归。在这种情况下,函数会调用自身来解决更小的问题,然后将这些结果与基本情况的结果相加,从而得到最终的结果。例如,如果你有一个函数,它需要计算两个数的积,而这两个数的积是偶数,那么函数就会先计算第一个数和第二个数的积,然后将这两个结果与基本情况的结果相加,从而得到最终的结果。

      递归函数可能会有一些问题,例如难以理解和维护,因为它们会不断调用自身。此外,递归函数也可能导致栈溢出,这是因为在每次调用自身时,都会在栈上分配一些内存来保存中间结果。

      为了避免这些问题,你可以使用一些技巧来控制递归的深度,例如使用尾递归优化(尾递归是指函数在递归调用完成后不再调用自身),或者使用记忆化技术来存储函数的结果,以避免重复计算。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部