Позвольте мне попытаться объяснить, когда вам стоит подумать об использовании рекурсивного метода.
Пример факториала: Factorial of n
определяется умножением 1*2*3*4*..*n
.
Предположим, вы хотите узнать, что такое факториал числа. Чтобы найти ответ, вы можете написать foreach l oop, в котором число умножается на следующее число и следующее число, пока оно не достигнет 0. Как только вы достигнете 0, все готово, вы вернете свой результат.
Вместо использования циклов вы можете использовать Рекурсию, потому что процесс на каждом этапе одинаков. Умножьте первое число на результат следующего, результат следующего определяется умножением этого следующего числа на результат следующего и т. Д.
5 * (result of rest)
4 * (result of rest )
3 * (result of rest)
...
1 (factorial of 0 is 1).---> Last Statement.
В этом случае, если мы выполняем рекурсию , у нас есть терминатор последовательности, последнее утверждение, где мы знаем для факта, что факториал равен 0 = 1. Итак, мы можем записать это как,
FactorialOf(5) = return 5 * FactorialOf(4) = 120 (5 * 24)
FactorialOf(4) = return 4 * FactorialOf(3) = 24 (4 * 6)
FactorialOf(3) = return 3 * FactorialOf(2) = 6 (3 * 2)
FactorialOf(2) = return 2 * FactorialOf(1) = 2 (2 * 1)
FactorialOf(1) = return 1 * FactorialOf(0) = 1 (1 * 1)
FactorialOf(0) = Known -> 1.
Итак, было бы целесообразно использовать один и тот же метод снова и снова, и как только мы добираемся до нашего терминатора, мы останавливаемся и начинаем возвращаться вверх по дереву. Каждый оператор, который вызывал FactorialOf, начинал возвращать числа, пока не достигнет вершины. Вверху у нас будет наш ответ.
Ваш случай персистентности
Он требует рекурсивного метода, а также вы берете результат и делаете тот же процесс на это каждый раз.
Persistence(39) (not single) = return 1 + Persistence(3 * 9 = 27) = 3
Persistence(27) (not single) = return 1 + Persistence(2 * 7 = 14) = 2
Persistence(14) (not single) = return 1 + Persistence(1 * 4 = 4) = 1
Persistence(4) (single digit) = Known -> 0 // Terminator.
В конце дня, если у вас есть один и тот же процесс, выполняемый после каждого вычисления / обработки с завершением, вы, скорее всего, сможете найти способ использовать рекурсию для этого процесса .