2017-10-29 125 views
1
const writeText = function(word, n) { 
    if(n >= 5) { 
    return ''; 
    } 
    n = n + 1; 
    return word + writeText(word + n); 
}; 

debugger; 

writeText('hello', 1); 

我想写一个代码,它将使用递归返回'hello1','hello2',...'hello5'。 我的代码没有工作,所以我使用调试器来查看错误。它表明经过第一次递归调用后,n变成undefined。任何人都可以帮助我,并显示此代码有什么问题?Javascript递归示例问题

+2

而正是在那里你能指望'当你仅用_one_参数'writeText(word + n)'...调用函数时,n'来自哪里? – CBroe

+0

有没有办法做到这一点只有一个参数?预先定义它是个好主意吗? – Architekton64

+0

_Why_?你写了你的函数来期望两个参数,那么为什么你现在要保留一个参数,而不是像刚才的初始调用那样传递它呢? – CBroe

回答

0

一些提示:

  • 当使用递归调用,您最好使用一个命名函数而不是函数表达式,因为名字不与功能的改变assingment。这对于递归调用是必要的,这可能会调用未知的函数。

  • 退出功能,如果该值大于5

  • 您需要显示n的实际值(也可能是新行)。

  • 用单词和增量值的第二个参数调用该函数。

function writeText(word, n) { 
 
    if (n > 5) { 
 
     return ''; 
 
    } 
 
    return word + n + '\n' + writeText(word, n + 1); 
 
}; 
 

 
console.log(writeText('hello', 1));

+0

谢谢!这解决了这个问题。 – Architekton64

0

你几乎没有 - 由@Nina肖尔茨提供的答案是好的。

这里您可以使用使用ES6模板文字来保持最新的方法。

既然你是新的有关语法的一些意见,你可以谷歌:

=> : arrow functions `text` : template literals

const writeText = (word, n) => 
 
    `${word+n} ${n < 5 ? writeText(word, n+1) : ''}`; 
 
    
 
console.log(writeText('hello',1))

```