使用递归函数javascript将基数转换为字符串
我试图编写一个递归函数,它接受两个参数——一个整数输入n和一个整数基m——并返回以m为基的数字的字符串表示形式。我被卡住了有人能帮我吗使用递归函数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
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时,您的第一行代码返回1,这是为什么?当提示为0时,表示股息是除数的倍数 这里(希望)有一个可以理解的算法解释(您可以随时在线搜索完美的解释和最有效的解释):0-9
- 从输入
最右边的数字开始,您的提醒(比如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 }