Приведем пример простой рекурсивной функции:
Create Function dbo.Factorial(@I integer)
Returns Integer
Begin
If @I <= 0 Return 1
Return dbo.Factorial(@I-1)*@i
End
Функция вызывает сама себя, если параметр @I больше нуля. Количество вызовов зависит от величины @I-го параметра.
Например,
Factorial(0) = 1
Factorial(1) = 1 * 1 = 1
Factorial(2) = 1 * 2 = 2
Factorial(3) = 1 * 2 * 3 = 6
Factorial(4) = 1 * 2 * 3 * 4 = 24
....
Разберем работу функции на примерах подстановки значений параметра:
Factorial(1)
|
= Factorial(1-1) * 1, где
|
|
|
Factorial(1-1)
|
= Factorial(0)
|
|
|
= 1
|
Factorial(1)
|
= 1 * 1 = 1
|
|
Factorial(2)
|
= Factorial(2-1) * 2, где
|
|
|
|
Factorial(2-1)
|
= Factorial(1)
|
|
|
|
Factorial(1)
|
= Factorial(1-1) * 1 = Factorial(0) * 1 = 1 * 1
|
|
|
= 1
|
|
Factorial(2)
|
= 1 * 2 = 2
|
|
|
Factorial(3)
|
= Factorial(3-1) * 3, где
|
|
|
|
|
Factorial(3-1)
|
= Factorial(2)
|
|
|
|
|
Factorial(2)
|
= Factorial(2-1) * 2, где
|
|
|
|
|
Factorial(2-1)
|
= Factorial(1) = Factorial(1-1) * 1 = Factorial(0) * 1 = 1 * 1
|
|
|
|
= 1 * 2
|
|
|
|
= 2
|
|
|
Factorial(3)
|
= 2 * 3 = 6
|
|
|
|
Factorial(4)
|
= Factorial(4-1) * 4, где
|
|
|
|
|
|
|
Factorial(4-1)
|
= Factorial(3)
|
|
|
|
|
|
|
Factorial(3)
|
= Factorial(3-1) * 3, где
|
|
|
|
|
|
|
Factorial(3-1)
|
= Factorial(2)
|
= Factorial(2-1) * 2, где
|
|
|
|
|
|
|
Factorial(2-1)
|
= Factorial(1) = Factorial(1-1) * 1 = Factorial(0) * 1 = 1 * 1
|
|
|
|
|
|
|
= 1
|
|
|
|
|
|
= 1 * 2
|
|
|
|
|
|
= 2
|
|
|
|
|
|
= 2 * 3
|
|
|
|
|
|
= 6
|
|
|
|
|
Factorial(4)
|
= 6 * 4 = 24
|
|
|
|
|
|
См. далее: Пример применения рекурсивной функции
|