[英]Recursive function prints correct final result inside the loop but then is undefined outside
[英]compute the result of a variable inside a recursive function
我已經編寫了打印階梯算法。 給定n的函數將打印n階樓梯。
var i = 1; function printStaircase(n) { //Base case if (n < 1) return n; //Recursive case var line = ''; line += ' '.repeat(n - 1); line += '*'.repeat(i); console.log(line); i++; return printStaircase(n - 1); } printStaircase(10);
如您所見,我必須從外部傳入i
變量。 我想知道如何在函數體內計算i的值時如何完成工作,以使其自成體系,並且不會從全局范圍中獲取任何東西
遞歸非常有趣-
const chars = (c = "") => (n = 0) => n === 0 ? "" : c + chars (c) (n - 1) const spaces = chars (" ") const stars = chars ("*") const newline = "\\n" const stairs = (n, m = n - 1) => m <= 0 ? "" : spaces (m) + stars (n - m) + newline + stairs (n, m - 1) console .log (stairs (10)) console .log (stairs (4))
營救結束:
/** * @return stair case n high */ function staircase(n) { function helper (cur, str) { if (cur < 1) return str; return helper( cur - 1, `${str}${' '.repeat(cur)}${'*'.repeat(n-cur+1)}\\n`); } return helper(n, ''); } /** * prints a staircase n-1 hight * @return 0 (don't know why) */ function printStaircase(n) { console.log(staircase(n)); return 0; } printStaircase(10); printStaircase(3);
我認為這樣會起作用
function printStaircase(n, i) {
//Base case
if (n < 1) return n;
//Recursive case
var line = '';
line += ' '.repeat(n - 1);
line += '*'.repeat(i);
console.log(line);
i++;
return printStaircase(n - 1, i);
}
printStaircase(10, 1);
希望這可以幫助!
n
和i
是相關的,因為i
只是n
的初始值減去n
+1
的當前值,因此我們可以使用類似以下內容很好地捕獲它:
function printStaircase(n) { staircaseInternal(n); function staircaseInternal(curr) { //Base case if (curr < 1) return; //Recursive case var line = ' '.repeat(curr - 1); line += '*'.repeat((n - curr) + 1); console.log(line); staircaseInternal(curr - 1); } } printStaircase(10);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.