gpt4 book ai didi

JavaScript:编写一个接受输入字符并使用递归返回该字符重复 5 次的函数

转载 作者:行者123 更新时间:2023-11-30 11:03:33 25 4
gpt4 key购买 nike

编写一个函数,接受一个输入字符并使用递归返回该字符重复 5 次。例如,如果输入是“g”,那么输出应该是“ggggg”。

我试过下面的代码:

function repeater(char) {

let newStr = '';

if (newStr.length === 5){
return newStr;
}

else {
newStr += char;
}

return repeater(char);
}

// To check if you've completed the challenge, uncomment these console.logs!
console.log(repeater('g')); // should return 'ggggg'
//console.log(repeater('j')); 'jjjjj'

我的代码返回:RangeError: Maximum call stack size exceeded

我做错了什么?

最佳答案

原因 newStr是一个局部变量,不会在递归调用中传递。因此,一个新的 newStr将在每次调用时创建,其长度将始终为 0。要解决此问题,请传递字符串或长度:

  function repeat(char, result = "") { 
if(result.length / char.length >= 3) return result;
return repeat(char, result + char); // ²
}

// a call goes like:
// repeat("g", "")
// repeat("g", "g")
// repeat("g", "gg")
// repeat("g", "ggg")

// OR

function repeat(char, count = 3) { /*¹*/
if(count <= 1) return char;
return char + repeat(char, count - 1);
}

// repeat("g", 3)
// "g" + repeat("g", 2)
// "g" + "g" + repeat("g", 1)
// "g" + "g" + "g"

或者如果这只适用于给定的一个字符(如任务所述):

 function repeat(char) {
if(char.length >= 3) return char;
return repeat(char + char[0]); // ²
}

注意:上述函数不会返回 5 次重复。那留给你做练习:)

如果我们把作业放在一边,你可以做 "g".repeat(5)虽然……


¹:= 3是所谓的“默认参数”。这意味着 repeat("g")等于 repeat("g", 3) .优点是你可以重复使用不同的长度,repeat("g", 10)将重复 g 10 次。

²:那是一个尾部调用。如果将递归调用放在最后一行并返回它,引擎可以将递归优化为一个循环,这会更快并且不会达到最大调用堆栈大小(无限递归仍然很糟糕, 尽量避免进入它。例如 newStr.length === 5 是危险的,因为长度为 6 的字符串会永远运行。因此我建议使用 >=<=(就像我上面所做的那样))。

关于JavaScript:编写一个接受输入字符并使用递归返回该字符重复 5 次的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56604890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com