вычислить результат переменной внутри рекурсивной функции - PullRequest
0 голосов
/ 10 июня 2019

Я написал алгоритм лестницы печати.Функция, которая дает 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 внутри тела функции, чтобы оно было автономным и ничего не получало из глобальной области видимости

Ответы [ 4 ]

2 голосов
/ 11 июня 2019

Рекурсия супер весело -

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))
1 голос
/ 10 июня 2019

Я думаю, что-то вроде этого будет работать

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);

Надеюсь, это поможет!

1 голос
/ 10 июня 2019

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);
1 голос
/ 10 июня 2019

Закрытие на помощь:

/** 
  * @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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...