Как работает эта рекурсивная функция Javascript (Возвращает длину строки) - PullRequest
0 голосов
/ 21 февраля 2020

нужна помощь.

Функция рекурсивно возвращает длину строки

const length = str => str == '' ? 0 : length(str.substring(1)) + 1;

Работает нормально. Мне трудно понять, как работает возврат длины (str.substring (1)) + 1 . Как все складывается? Например, ввод: «Hello World»: 11. Почему функция не объединяет (из-за знака «+») ввод: «Hello World», вывод: «Hello World11»?

Спасибо

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Например, str = "hello", выполнить код "length (str)" шаг, следующий за

    length("hello")
    length("ello") + 1 
    (length("ll") + 1) + 1
    ((length("lo") + 1) + 1) + 1
    (((length("o")+1) + 1) + 1) + 1
    ((((0 + 1)+1) + 1) + 1) + 1
1 голос
/ 21 февраля 2020

Чтобы упростить объяснение, я переписал функцию в «длинную форму» ниже:

function length(str){
  if (str == ''){
    return 0;
  }
  const substr = str.substring(1);
  return length(substr) + 1;
}

console.log(length('abc'));

Таким образом, с учетом ввода "abc", шаги выполнения следующие:

  1. Проверка 'abc' == '' ==> false.
  2. Создать substr = 'bc'.
  3. Вызвать length('bc'):
    1. Проверить 'bc' == '' ==> false.
    2. Создать substr = 'c'.
    3. Invoke length('c'):
      1. Check 'c' == '' ===> false.
      2. Create substr = ''.
      3. Invoke length('') :
        1. Проверка '' == '' ===> true
        2. Возврат 0.
      4. Работа 0 + 1.
      5. Возвраты 1.
    4. Работа 1 + 1.
    5. Возврат 2.
  4. Работа 2 + 1.
  5. Return 3.

Как вы можете видеть, нигде в коде не возникнет конкатенация строки с номером.

...