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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于尾递归,我哪里写错了,为什么输入大时还是会报栈溢出?
    38
    0

    如题,我用递归计算PI的近似值:PI/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 + ···;
    代码如下:

    let calPI = (n, sum = 1)=> {
        if(n < 3) 
            return sum*4;    
        n%4 === 1 ? sum += 1/n : sum -= 1/n;
        return calPI(n-2, sum);
    }
    console.log(calPI(99999));

    calPI(9999)没有报栈溢出,请问我是哪里写错了吗?

    1
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 若相守︽请相惜 普通会员 1楼

      尾递归是一种在递归函数的最后返回值时,直接返回的结果,而不是调用自身的方法。这样可以避免递归调用时的栈溢出问题。

      假设你有一个递归函数,如下所示:

      python def recursive_function(n): print(n) recursive_function(n - 1)

      在这个函数中,当n大于1时,每次递归调用都会导致新的函数调用,而不会进行任何数据的交换。这会导致递归调用的深度无限增大,最终导致栈溢出。

      要解决这个问题,你可以在函数的最后添加一个条件,如下所示:

      python def recursive_function(n): if n <= 1: print(n) recursive_function(n - 1) else: print(n) recursive_function(n - 1)

      在这个修改后的函数中,只有当n小于或等于1时,才会调用自身,并打印出n。这样就可以避免无限递归调用导致的栈溢出问题。

      请注意,这只是一个基本的示例,实际的递归函数可能需要处理更复杂的情况,例如,处理无穷递归、处理递归深度等。

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