递归“超出最大调用堆栈大小” - 十进制到十六进制转换器
Recursion "maximum call stack size exceeded" - decimal to hexadecimal converter
我正在尝试在不使用Number.prototype.toString
的情况下制作十进制到十六进制的转换器(这是一个不允许该功能的赋值)。 我正在尝试使用递归来尝试工作。 一切都在主else
内部else
之前,如果这有任何意义的话。 当我对 255 以上的任何数字(即任何十六进制中超过 2 位数字的数字)运行它时,它会给我这个错误。 有谁知道为什么会这样?
var number = parseInt(prompt("Give me a number and I will turn it into hexadecimal!"));
var digit = 1;
var hexConverter = function () {
if (digit === 1) {
if (Math.floor(number / 16) === 0) {
console.log(hexDigits[number]);
} else {
digit = 16;
console.log(hexConverter(), hexDigits[number % 16]);
}
} else {
if (Math.floor(number / (digit * 16)) === 0) {
return (hexDigits[Math.floor(number / digit)]);
} else {
return (hexConverter(), hexDigits[number % (digit * 16)]);
}
digit = digit * 16;
}
};
hexConverter();
您在进行递归调用后更改digit
,因此它将停留在 16 并且永远不会达到增加它的地步。
将digit = digit*16;
移到递归调用之前,就像您在第一部分中digit = 16
的那样。
function toHex(x) {
var res='',h;
while (x) {
res=(((h=x&15)<10)? h : String.fromCharCode(55+h)) + res;
x>>=4;
}
return res;
}
会很好用。
问你:为什么只有"相当"?:-)
相关文章:
- 带时区的Javascript Datestring转换器
- 带Js的货币转换器
- 需要帮助编写在不使用toString的情况下将十进制转换为二进制的代码
- Ajax调用OGRE转换器
- JavaScript中的温度转换器(IF ELSE条件)
- PDF到JPG的转换器
- 数据互绑定问题:转换器只运行一次,无法绑定元素的 ID
- 货币转换器未转换
- 显示Aurelia值转换器上的所有过滤器
- AngularJS希伯来文日期转换器
- 带有JSONp的货币转换器
- 无需Javascript内置函数即可将十进制转换为十六进制
- JS或C#中的货币转换器
- 设置money.js(用于货币转换器)时出现问题
- 创建/使用简单的美制到公制转换器的问题.(HTML/JavaScript)函数未启动
- Backbone.js的Backbone.Modelbinding插件中是否有绑定的转换器参数
- Clojure到JavaScript转换器(Leiningen)
- 如何为温度转换器编写简单的javascript代码.
- 递归“超出最大调用堆栈大小” - 十进制到十六进制转换器
- 神秘的2出现在我的JavaScript十进制到二进制转换器的输出中