Как эта функция рекурсивно меняет строку в javascript? - PullRequest
1 голос
/ 02 мая 2020

Я прочитал несколько сообщений о переполнении стека и посмотрел много видео на YouTube, но я просто не понимаю, как работает этот код. Я понимаю, что 'reverse (s.slice (1)) "рекурсивно нарезает, пока строка не станет просто одной буквой, но где строка возвращается в обратном порядке? также, какова роль '+ s [0]' в этой функции?

function reverse(s) {
    if (s.length===1) return s;
    return reverse(s.slice(1)) + s[0];
}

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Это рекурсивная функция. Рекурсия происходит, когда вещь определяется в терминах себя или своего типа.

В этом случае function reverse(s) вызывается в самом конце.

s.slice(1) захватывает все значение, кроме самого первого значения, а затем добавьте s [0].

Этот веб-сайт позволит вам легко визуализировать вашу рекурсию. https://visualgo.net/en/recursion

Если у вас все еще проблемы с пониманием, дайте мне знать. Ура!

1 голос
/ 02 мая 2020

Взять, к примеру, вход abcd.

При первом вызове запускается return reverse(s.slice(1)) + s[0];. Разбирая аргументы, это превращается в return reverse('bcd') + 'a'; - оно снимает последнюю букву строки и рекурсивно вызывает себя с первыми символами.

При reverse('bcd') возвращается reverse('cd') + 'b'.

При reverse('cd') возвращается reverse('d') + 'c'.

reverse('d'), возвращается 'd'.

На этом этапе рекурсивные вызовы и возвраты разрешаются самостоятельно. reverse('d') + 'c'. равно 'd' + 'c' или 'dc'.

reverse('cd') + 'b' равно 'dc' + 'b' или 'dcb'.

reverse('bcd') + 'a'; равно 'dcb' + 'a' или 'dcba', что вернулся к первоначальному звонку reverse('abcd').

0 голосов
/ 02 мая 2020

Каждый раз, когда функция вызывает себя, она пропускает на один символ меньше, пока длина передаваемой строки не станет 1, что является точкой, когда мы начинаем распространять возвращаемые значения

Проверьте эту иллюстрацию:

Ввод: "ДЖОН"

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...