javascript - 找不到算法时打印 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));
}
但即使算法可以被发现它只是打印“对不起”有人可以帮忙吗?
解决方案
您可以在第一次调用递归函数后添加默认值。
在 内部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));
推荐阅读
- http - 分隔符防御中的SP和HT是什么意思
- flutter - 使用不显示 MediaQuery 错误的上下文调用 MediaQuery.of(),即使应用程序中未使用 MediaQuery
- yii2 - HTML Purifier - 如何保持 css "margin-left: calc(25%)"
- c - 在 C 中,如何在没有指针的情况下更改局部范围变量?
- spring-boot - 如何在 JMX 上使用 SpringBoot 执行器
- java - 为什么编码在 Eclipse 中有效,但不在 Eclipse 之外?
- python - 如何在 Matlab 或 Python 中移动以零为内接的矩形数组?
- java - 在 OneToMany 的情况下不会发生数据库插入
- algorithm - 数量级的链式法则
- php - 如何在 PHP 类中创建关联数组