首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使javascript上的递归函数没有最大调用堆栈大小超过错误?

如何使javascript上的递归函数没有最大调用堆栈大小超过错误?
EN

Stack Overflow用户
提问于 2017-08-12 14:33:54
回答 1查看 97关注 0票数 0

我想用javascript做同样的机器人行走功能,但它得到了调用堆栈大小错误。

http://www.chegg.com/homework-help/questions-and-answers/robot-take-steps-1-2-3-meters-write-program-allows-shows-possible-steps-robot-take-using-r-q3756383

代码语言:javascript
复制
    function walk(meter) {
        if(meter < 0) {
            count = 0;
        } else if(meter <= 2) {
            count = meter;
        } else if(meter == 3) {
            count = walk(meter-1)+walk(meter-2)+1;
        } else {
            count = walk(meter-1)+walk(meter-2)+walk(meter-3);
        }
        return count;
    }


    console.log(walk(100));
EN

回答 1

Stack Overflow用户

发布于 2017-08-12 14:37:49

它会超过调用堆栈的大小因为你的复杂度是指数的,你可以使用记忆法来解决你的问题,这有助于将指数时间复杂度转换为多项式复杂度,现在这段代码运行在O(100)。

代码语言:javascript
复制
	let obj = {};
	function walk(meter) {
        if(meter < 0) {
            count = 0;
        }
        else if(obj[meter] != undefined){
        	return obj[meter];
        } else if(meter <= 2) {
            count = meter;
        } else if(meter == 3) {
            count = walk(meter-1)+walk(meter-2)+1;
        } else {
            count = walk(meter-1)+walk(meter-2)+walk(meter-3);
        }
        obj[meter] = count;
        return count;
    }


    console.log(walk(100));

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45647273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档