Рекурсивные вызовы
Прохожу на FreeCodeCamp рекурсию
Шаг 71 - https://www.freecodecamp.org/learn/j...verter/step-71 Вот интересующая функция const decimalToBinary = (input) => { if (input === 0) { return ""; } else { return decimalToBinary(Math.floor(input / 2)) + (input % 2); } }; Если мы напишем в input 10, то как я понял: 10/2 = 5 5/2 = 2 2/2 = 1 1/2 = 0 input === 0 и мы возвращаем пустую строку А далее мы начинаем объединять вызовы и тут я не понимаю, вот что мне ответила нейросеть: decimalToBinary(1) ВОЗВРАТ decimalToBinary(0) + (1 % 2) = "" + 1 = "1" decimalToBinary(2) ВОЗВРАТ decimalToBinary(1) + (2 % 2) = "1" + 0 = "10" decimalToBinary(5) ВОЗВРАТ decimalToBinary(2) + (5 % 2) = "10" + 1 = "101" decimalToBinary(10) ВОЗВРАТ decimalToBinary(5) + (10 % 2) = "101" + 0 = "1010" Пока не понимаю как тут логика строится, может помочь кто нибудь |
deniscikasov@gmail.com, нейросеть тебе ответила бесполезно, потому что это лог после вызова а не до.
Мб так будет понятней: НАЧАЛО decimalToBinary(10) НАЧАЛО decimalToBinary(5) НАЧАЛО decimalToBinary(2) НАЧАЛО decimalToBinary(1) НАЧАЛО decimalToBinary(0) КОНЕЦ decimalToBinary(0) ВОЗВРАТ "" КОНЕЦ decimalToBinary(1) ВОЗВРАТ decimalToBinary(0) + (1 % 2) = "" + 1 = "1" КОНЕЦ decimalToBinary(2) ВОЗВРАТ decimalToBinary(1) + (2 % 2) = "1" + 0 = "10" КОНЕЦ decimalToBinary(5) ВОЗВРАТ decimalToBinary(2) + (5 % 2) = "10" + 1 = "101" КОНЕЦ decimalToBinary(10) ВОЗВРАТ decimalToBinary(5) + (10 % 2) = "101" + 0 = "1010" |
Мы выходим из стека начиная с 0, где 0/2 === ' ' и 0%2 === ' '
потом 1/2 === 0 это пустая строка и 1%2 это 1: итог 1 далее 2/2 === 1 и 2%2 === 0: итог 1 + 0 = 10 далее 5/2 ===2 и 5%2 === 1: итог 2 + 1 = 21 (проблема) далее 10/2 === 0 и 10%2 === 0: итог 0 + 0 = 0 Кажется я понял, тут первая часть выражения уже не действительна, и мы только вторую задействуем. Я понял, спасибо, кажется понял |
Часовой пояс GMT +3, время: 13:10. |