首页 > 解决方案 > 找不到算法时打印 console.log 而不是 null

问题描述

我对 js 很陌生,弄清楚如何 console.log 我想要的而不是“null”让我有点头疼。

我有这段代码(它来自一本名为“Eloquent JavaScript”的书)

function findNumber(number) {
function checkingForSolution(current, history) {
    if (current == number) {
        return history;
    } else if (current > number) {
        return null;
    } else {
        return (
            checkingForSolution(current + 5, `(${history} + 5)`) ||
            checkingForSolution(current * 3, `(${history} * 3)`)
        );
    }
}

return checkingForSolution(1, '1');
} 
console.log(findNumber(34));

它通过乘以 3 或加 5 来找到一个数字。我想添加console.log,这样它就会打印出类似“抱歉找不到算法”而不是“null”的内容

我无法解决的问题是,如果我在函数中检查空值,它只会在可以找到算法时打印 console.log 而不是算法。当函数正在搜索解决方案时,它会获得多个“空值”

我尝试过这样的事情

if(findNumber.checkingForSolution == null){
console.log('sorry')
}
else{console.log(findNumber(34));
}

但即使算法可以被发现它只是打印“对不起”有人可以帮忙吗?

标签: javascript

解决方案


您可以在第一次调用递归函数后添加默认值。

在 内部checkingForSolution,任何将 替换null值都会过早停止对有效值的搜索。

function findNumber(number) {
    function checkingForSolution(current, history) {
        if (current == number) return history;
        if (current > number) return null;
        return checkingForSolution(current + 5, `(${history} + 5)`)
            || checkingForSolution(current * 3, `(${history} * 3)`);
    }

    return checkingForSolution(1, '1')
        || "sorry could not find algorithm";
}

console.log(findNumber(34));
console.log(findNumber(2));


推荐阅读