Javascript “递归”;超过最大调用堆栈大小";-十进制到十六进制转换器

Javascript “递归”;超过最大调用堆栈大小";-十进制到十六进制转换器,javascript,recursion,stack,Javascript,Recursion,Stack,我试图在不使用Number.prototype.toString的情况下创建一个十进制到十六进制的转换器(这是一个不允许该函数的赋值)。我正在尝试使用递归来处理它。一切正常,直到主else中的else(如果有意义的话)。当我对255以上的任何数字(即十六进制中超过2位的任何数字)运行它时,它会给出该错误。有人知道为什么会这样吗 var number = parseInt(prompt("Give me a number and I will turn it into hexadecimal!")

我试图在不使用
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();

在进行递归调用后,您正在更改
数字
,因此它将停留在16,并且永远不会达到您增加它的点

移动
位=位*16到递归调用之前,就像第一部分中的
digit=16
一样。

函数到hex(x){
function toHex(x) {
   var res='',h;
   while (x) {
     res=(((h=x&15)<10)? h : String.fromCharCode(55+h)) + res; 
     x>>=4;
   }
   return res;
}
var res='',h; while(x){ res=((h=x&15)>=4; } 返回res; }
会很好的。

问:为什么只有“相当”?:-)

我把它移到递归部分之前,并将返回中的“数字*16”改为“数字”。现在递归不起作用。不再有错误,但它只显示其中的两个数字。你能帮我吗?@user2852803:你在代码的第二部分使用
return
而不是
console.log
,因此如果你在控制台中查找结果,你将看不到它。