簡體   English   中英

計算遞歸函數中變量的結果

[英]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);

希望這可以幫助!

ni是相關的,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM