Объясняю: это рекурсия. Сумма 250 не делится ровно на 3, функция выполняется повторно добавляя один к возврату числа
Было 250, оно не делится на 3 ровно. Добавляем один к выводу, запускаем заново но уже с 83,333 (возьмёт цифру 83, так как нужен int). Запуск повторно: 83 не делится на три ровно, добавляется 1 к уже существующей 1 (У нас уже два и запуск повторно и берём число 27,666 но из-за int это 27). 27 делится на три, добавляется 0 и функция больше не выполняется. Считаем результат: 1+1+0 = 2
Щас объясню. Там пишет что если 250 нацело не делиться на 3, то возвращаем 0, а если число делиться то 1+ f(250/3). Так как 250 не может делиться на 3 то возвращаем 0, всё просто
@c3zs4r,ты ошибся немного в конце. Да она правда вернёт 1+f(x/3) , но f(x/3) не равно 0. Так как 250/3 даст нам число которое делиться на 3 и если подставить его в функцию, то оно вернёт 0, так что 1+0=1
MiExist, 250 / 27 = 252 / 3 (в левой части кратность учитываем, в обоих частях 0) 27 = 3 * 3 * 3 250 / 3 = 83 250 / 3 = 27 250 / 3 = 9 (тут кратность => 0) В любом случае вопрос сколько вернётся, а как вы в уме это решить неважно
Checkerchin, сори, я не учёл, что когда x/3 оно даст целое число 83 которое не делиться нацело на 3. По этому у меня вышло 1. Если б float был, то 1 был бы ответ.
Рассмотрим следующую подпрограмму, а x - целочисленную переменную, значение которой равно 2, какое значение будет иметь x после вызова