Палиндром (архив)

Vyacheslav Mukhin

Не получается решить используя рекурсию

// removed

рекурсия не останавливается

make: Entering directory `/usr/src/app'
mocha --compilers js:babel-register --colors test.js


  isPalindrome
absba a undefined
absb b undefined
abs s undefined
ab b undefined
a a undefined
 undefined undefined
1
 undefined undefined
1
 undefined undefined
1
 undefined undefined
1
 undefined undefined

и newStr почему-то undefined

3 0

  1. Напишите нормальное терминальное условие выхода из рекурсии. Вместо него Вы зачем-то используете цикл while, который, ко всему прочему, является бесконечным, потому что в контексте всех рекурсивных вызовов (кроме самого последнего, когда в рекурсивную функцию передаётся пустая (полностью обрезанная) строка) условие цикла всегда будет истинным. Именно поэтому код сразу же зациклился на предпоследнем вызове (при выходе из рекурсии на последнем вызове).
  2. Ваши рекурсивно вызываемые функции ничего не возвращают, а потому от них автоматически возвращается значение undefined.
  3. let newStr; - при объявлении переменной без инициализации, ей присваивается undefined. Обратите внимание, эта операции будет происходить на каждом очередном вызове isPalindrom.

0

как он зацикливается если длинна пустой строки 0, а 0 > 1 - условие ложное, конец цикла?

0

Перечитайте внимательнее, что выше написал. На каждом рекурсивном вызове запускается свой цикл while и там свой контекст, независимый от других вызовов. На последнем рекурсивном вызове (когда строка пустая) зацикливание не произойдёт и управление передастся назад в предыдущий (вызывающий код) вызов - в контексте этого вызова условие цикла тоже самое, но значение str уже другое, не позволяющее выйти из него.

Судя по всему, Вы задним числом поменяли условие цикла на strings.length(str) > 1 - в таком случае управление передастся из предыдущего вызова (при длине строки, равной 1) в пред-предыдущий (при длине строки, равной 2), и зацикливание произойдёт уже на нём.

0

Похожие вопросы

Денис Стрелков 14 сентября 2017 →

Добрый день. Не могли бы вы пожалуйста прокомментировать мое решение (https://ru.hexlet.io/code_reviews/231...

Анатолий Иванов 30 августа 2017 →

Решение учителя не учитывает вариант, что слово может быть написано с большой буквы. Например словао radar ...

Максим Синяков 20 августа 2017 →

Насколько мое решение (https://ru.hexlet.io/code_reviews/21257) читаемо? Хочется научиться соблюдать баланс...

Анастасия Файзулина 02 июля 2017 →

Я написала рабочее решение на repl. Создала пустую строку и с помощью цикла создала строку наоборот, а пото...

Roman Vinogradov 24 мая 2017 →

Очень классные задания, все нравится, только еще очень многое не понятно, рекурсию пока очень слабо понимаю...

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Javascript, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →