javascript - 结束递归的有效方法?
问题描述
我正在尝试定义一个递归函数,如果给定输入的平方和导致 1,则返回 X,这很好。但是,如果输入没有导致 1,那么它会一直循环,我找不到退出它的方法。
例如,整数 7、10、13 的输入导致 1,但 2、3、4、5、6、11 的输入不会。如果我尝试
x === 4 || x === 0
,它会结束不会导致 1 的输入的递归,但对于某些输入,它需要多次递归调用才能达到 4,而且效率不高。稍后,我想将返回值用于其他计算。
function recursion(x) {
if (x === 0) {
return;
}
if (x === 1) {
return x;
}
x = squareSum(x);
return recursion(x);
}
这是 squareSum 函数。
function sqaureSum(n){
let sumTotal;
if (n < 10){
sumTotal = Math.pow(n, 2);
return sumTotal;
}
sumTotal = Math.pow(n % 10, 2) + squareSum(Math.floor(n / 10));
return sumTotal;
}
解决方案
因为sumTotal = Math.pow(n % 10, 2) + squareSum(n / 10);
当你计算n / 10
它可以是一个浮点数时,你应该将你的数字转换为int
用于检查float
里面的数字 log xrecursion
function recursion(x) {
console.log(x) // <-- HERE
...
}
Math.floor
, Math.ceil
,Math.round
可以帮助你
并且对于
if (x === 0) {
return;
}
在里面recursion
添加一个值( 0 或 1 )。它返回undefiend
并转换为NaN
推荐阅读
- javascript - 使用 Userscript 自动添加 HTML 属性
- c - 谁能详细告诉我,为什么我正在观看该程序的警告?
- powershell - 如何在 PowerShell 6 模块中引用 nuget 包
- mysql - 永久计算域mysql数据库
- php - 如何处理带有 www 和不带 www 的域的 Xing-login 插件?
- unity3d - 如何在unity3d中每隔...秒显示一个广告?
- c# - 连接到我的 controller.cs 文件
- c++ - 使用虚拟内存系统调用分配原子数组是否安全?
- python - 使用 networkx 进行 2D 环面互连
- vb.net - 在同步锁中执行批处理文件以等待它的内部进程在 vb.net 中完成