2017-10-29 97 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))

```