Это базовая рекурсия.Просто попытайтесь создать дерево рекурсии для программы, которую вы написали, и вы сможете понять, почему вывод, который вы видите, имеет значение 3.
Вы ожидаете 0 в качестве ответа, только на основепоследний рекурсивный вызов (условие завершения), но когда происходит рекурсивный вызов, существует концепция записей активации, которые поддерживаются в форме структуры данных стека.
Дерево рекурсии будет выглядеть примерно так, как показано в Дерево рекурсии для общего кода
num_digits(123) = 1 + num_digits(12)
num_digits(12) = 1 + num_digits(1)
num_digits(1) = 1 + num_digits(0)
num_digits(0) = 0
Использование подстановки:
num_digits(123) = 1 + (1 + (1 + (0)))
Пожалуйста, четко следуйте приведенным выше круглым скобкам, и вы сможете полностью понять вывод, который вывыходили из кода, который вы написали.