javascript - JavaScript 中的递归函数 - 未正确调用它

标签 javascript

有人可以帮我解释一下我在这个递归函数上做错了什么吗? 我正在尝试传递一个值,如果该值存在于我的选项列表中,则返回它。如果不可用,那么我想减去 10000,然后重试,直到找到匹配的值。它几乎可以工作,除了当我找到匹配的值时,它似乎没有更新原始函数调用,也许?没有把握。任何帮助将不胜感激。提前致谢。

var totalCost = 34000,
    options = [10000, 0],
    recAmt;

if (totalCost >= 30000) {
    recAmt = getRecAmt(30000, 1);
    console.log(recAmt);
}

function getRecAmt(value, tier) {
    console.log('Trying: ' + value + ' for ' + tier);
    var i2 = 0,
        recAmt = 0;

    for (i2 = 0; i2 < options.length; i2 += 1) {
        if (value === parseInt(options[i2])) {
            recAmt = value;
            console.log('Found: ' + recAmt);
        }
    }

    if(recAmt === 0) {
        if (tier === 1) {
            getRecAmt(value - 10000, tier);
        }

    } else {
        return recAmt;
    }
}

目前我的控制台返回

Trying: 30000 for 1
Trying: 20000 for 1
Trying: 10000 for 1
Found: 10000
0 

最佳答案

您没有返回任何东西

if(recAmt === 0) {
    if (tier === 1) {
        getRecAmt(value - 10000, tier);
    }

} else {
    return recAmt;
}

需要

if(recAmt === 0) {
    if (tier === 1) {
        // RETURN STATEMENT HERE
        return getRecAmt(value - 10000, tier); 
    }

} else {
    return recAmt;
}
<小时/>

这是一个演示片段

var totalCost = 34000,
    options = [10000, 0],
    recAmt;

if (totalCost >= 30000) {
    recAmt = getRecAmt(30000, 1);
    console.log(recAmt);
}

function getRecAmt(value, tier) {
    console.log('Trying: ' + value + ' for ' + tier);
    var i2 = 0,
        recAmt = 0;

    for (i2 = 0; i2 < options.length; i2 += 1) {
        if (value === parseInt(options[i2])) {
            recAmt = value;
            console.log('Found: ' + recAmt);
        }
    }

    if(recAmt === 0) {
        if (tier === 1) {
            return getRecAmt(value - 10000, tier);
        }

    } else {
        return recAmt;
    }
}

关于javascript - JavaScript 中的递归函数 - 未正确调用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489542/

相关文章:

javascript - bootstrap - 工具提示内具有 onclick 功能的按钮

javascript - 在 Jquery Mobile 中通过单选按钮显示隐藏列表

javascript - 交换(拖放)在特定的 div 中不起作用

javascript - parseInt 出了什么问题

javascript - 如何让我的用户输入成为我网页上的标题?

javascript - 带有 Angular 2 的前端 "micro services"

javascript - 无需 ajax 请求即可将数据添加到 jQuery-Flexigrid

javascript - 在 JSDoc 中,如何将参数类型作为来自对象字符串属性常量数组的字符串应用?

javascript - splice 从数组及其父数组中删除 - 奇怪的问题

javascript - 异步/等待模拟