使用递归函数javascript将基数转换为字符串

使用递归函数javascript将基数转换为字符串,javascript,recursion,base,Javascript,Recursion,Base,我试图编写一个递归函数,它接受两个参数——一个整数输入n和一个整数基m——并返回以m为基的数字的字符串表示形式。我被卡住了有人能帮我吗 const toStr = (n, base) => { //when no remainder return 1 if(n % base === 0) return 1; if(n % base >= 1){ return toStr(Math.floor(n/base))+(n % base); } return &q

我试图编写一个递归函数,它接受两个参数——一个整数输入n和一个整数基m——并返回以m为基的数字的字符串表示形式。我被卡住了有人能帮我吗

const toStr = (n, base) => {
   //when no remainder return 1
  if(n % base === 0) return 1;
  if(n % base >= 1){
   return toStr(Math.floor(n/base))+(n % base);
  }
  return " ";
}


toStr(199, 10) //'199'
toStr(14, 8)//'16'
toStr(30, 2)//'11110'

您忘记在递归调用中包含
base

为了降低复杂性,这个递归调用的基本情况是检查n是否为零,然后使用从上层堆栈调用返回的空字符串返回concat

consttostr=(n,base)=>{
//当没有余数时返回1
如果(!n){
返回“”;
}
返回toStr(数学楼层(n/base)、base)+(n%base);
};
console.log(toStr(199,10));/'199'
console.log(toStr(14,8));/'16'

console.log(toStr(30,2));/'11110'
您忘记在递归调用中包含
base

为了降低复杂性,这个递归调用的基本情况是检查n是否为零,然后使用从上层堆栈调用返回的空字符串返回concat

consttostr=(n,base)=>{
//当没有余数时返回1
如果(!n){
返回“”;
}
返回toStr(数学楼层(n/base)、base)+(n%base);
};
console.log(toStr(199,10));/'199'
console.log(toStr(14,8));/'16'

console.log(toStr(30,2));/'11110'
这里有一些一般建议:-在担心程序的实际代码之前,一定要弄清楚问题/解决方案背后的逻辑

现在更具体一点:- 当提醒为0时,您的第一行代码返回1,这是为什么?当提示为0时,表示股息是除数的倍数

这里(希望)有一个可以理解的算法解释(您可以随时在线搜索完美的解释和最有效的解释):

  • 从输入
    n
    最右边的数字开始,您的提醒(比如
    r
    ,我们很快就会看到
    r
    的表示)在每一步都将是从右边开始的输出的当前数字
  • 得到当前数字后,从
    n
    中减去
    r
    ,然后将
    r
    除以
    base
    ,得到商(比如
    q
  • 该商现在变为右下一位的
    n
    。因此,回到第一步,将此
    q
    视为
    n
    ,以获取下一个数字,依此类推,直到
    q

  • 0时,任何数字处
    r
    的公认字符串表示形式为
    0-9
    。以下是一些一般性建议:-在担心程序的实际代码之前,务必弄清楚问题/解决方案背后的逻辑

    现在更具体一点:- 当提醒为0时,您的第一行代码返回1,这是为什么?当提示为0时,表示股息是除数的倍数

    这里(希望)有一个可以理解的算法解释(您可以随时在线搜索完美的解释和最有效的解释):

    • 从输入
      n
      最右边的数字开始,您的提醒(比如
      r
      ,我们很快就会看到
      r
      的表示)在每一步都将是从右边开始的输出的当前数字
    • 得到当前数字后,从
      n
      中减去
      r
      ,然后将
      r
      除以
      base
      ,得到商(比如
      q
    • 该商现在变为右下一位的
      n
      。因此,回到第一步,将此
      q
      视为
      n
      ,以获取下一个数字,依此类推,直到
      q

  • 在任何数字处,
    r
    的公认字符串表示为
    0-9
    如果
    0要获得完整的答案,这在基数大于10时如何工作?也许会提到这一点?为了得到一个彻底的答案,这对大于10的基数是如何工作的?也许可以提一下?
    
    function toStr(n, base) {
        if(n == 0) return ""; 
        let r = n % base; // r is the reminder
        return toStr((n - r) / base, base) // ((n - r) / base) is the quotient to consider as n for the rest of the conversion after extracting the right most digit
            + (r > 9 ? String.fromCharCode(87 + r) : String.fromCharCode(48 + r)); // concatenate the right most digit to the rest of the conversion
    }