第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript - 遞歸方式的步驟算法 - 多循環(huán)問題

JavaScript - 遞歸方式的步驟算法 - 多循環(huán)問題

蕭十郎 2022-10-27 14:26:32
我有一個非常受開發(fā)人員歡迎的算法練習,它返回:steps(3)######steps(5)###############我正在研究以遞歸方式開發(fā)的版本。下面的代碼工作正常。function steps(n, row = 0 , stair = '') {  if(n === row) {    return;  }  if(n === stair.length) {    console.log(stair)    return steps(n, row + 1)  }  if (stair.length <= row) {    stair += '#';  } else {    stair += ' '  }  steps(n, row, stair)}steps(3)我唯一的疑問與這部分代碼中“返回”的重要性有關(guān): if(n === stair.length) {   console.log(stair)   return steps(n, row + 1) // <--- this 'return'  }如果我刪除'return',像這樣:if(n === stair.length) {  console.log(stair)  steps(n, row + 1)  // <-- without the return}這會在控制臺上生成一個循環(huán)錯誤:超出最大調(diào)用堆棧大小我想了解為什么會發(fā)生這種情況。我仍然沒有太多的遞歸函數(shù)練習。
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車

TA貢獻1862條經(jīng)驗 獲得超6個贊

如果n===stair.length,您不想steps(n, row, stair)在函數(shù)底部進行調(diào)用,如果您省略了return.



查看完整回答
反對 回復 2022-10-27
?
慕桂英4014372

TA貢獻1871條經(jīng)驗 獲得超13個贊

它中斷是因為您的代碼在 row === n 時終止。那條線是唯一改變行的地方。沒有它,代碼將產(chǎn)生如下輸出:

#
#
#
#
#
...

由于您在遞歸函數(shù)中處理此問題,因此 javascript 在它變得無限深之前會用完堆棧幀。


查看完整回答
反對 回復 2022-10-27
?
烙印99

TA貢獻1829條經(jīng)驗 獲得超13個贊

有兩種方法可以考慮遞歸函數(shù)。首先是實際查看實際發(fā)生的情況——也就是說,查看一個示例并通過注意對函數(shù)的所有調(diào)用來“展開” steps。這很安全,也很容易。
第二種方式更“神奇。在這種思維方式中,您不會考慮“大局”或考慮遞歸函數(shù)的多次調(diào)用。相反,您形成了一個連貫的想法,即您的遞歸函數(shù)應(yīng)該接受什么作為參數(shù)和它應(yīng)該返回什么。然后,您始終可以按照您認為它應(yīng)該工作的方式使用該函數(shù)來編寫遞歸函數(shù)的主體。這可能會更加令人困惑,但是一旦您“獲得”它,它就會非常優(yōu)雅并且是更有用的思維方式。

讓我們在這里使用第一種思維方式,因為它可能更容易。steps你能告訴我按順序調(diào)用了多少次以及使用哪些參數(shù)?例如,第一個調(diào)用是steps(5, 0, ''). 那么,第二次調(diào)用steps會發(fā)生什么?按照這些步驟(呵呵),您應(yīng)該會看到問題所在。


查看完整回答
反對 回復 2022-10-27
  • 3 回答
  • 0 關(guān)注
  • 139 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號