Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Рекурсивные вызовы (https://javascript.ru/forum/misc/85948-rekursivnye-vyzovy.html)

deniscikasov@gmail.com 21.06.2024 18:38

Рекурсивные вызовы
 
Прохожу на 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"
Пока не понимаю как тут логика строится, может помочь кто нибудь

Aetae 21.06.2024 19:12

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"

deniscikasov@gmail.com 21.06.2024 19:22

Мы выходим из стека начиная с 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.