Вопрос пользователя Vyacheslav Mukhin в испытании «Палиндром»

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

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

Vyacheslav Mukhin

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

0

Александр О.

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

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

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Нажимая кнопку «Зарегистрироваться», вы даёте своё согласие на обработку персональных данных в соответствии с «Политикой конфиденциальности» и соглашаетесь с «Условиями оказания услуг». Защита от спама reCAPTCHA «Конфиденциальность» и «Условия использования».

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

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

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

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

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

Roman Vinogradov 24 мая 2017 →

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

Нургельды Дюсенов 14 мая 2017 →

Даёт undefined в тестах. (Ну и я не придумал пока как по настоящему использовать рекурсию). // removed

Alex Weinberg 05 мая 2017 →

Зачем в заданиях используются нестандартные библиотеки, вроде strings?