logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

Глава 3

Факториал целого числа, number, большего или равного 0, может быть вычислен итеративно (нерекурсивно) с помощью оператора for следующим образом:

factorial = 1;

for (int counter = number; counter >=1; counter--) factorial *= counter;

Рекурсивное определение функции факториал дается следующим соот­ношением:

n\=nx(n-l)l

Например, факториал 5! очевидно равен 5x4!. В самом деле:

5!=5x4x3x2xl

5!=5x(4x3x2xl)

5!=5x4!

Вычисление 5! должно происходить в соответствии с рис. 3.13. Рис. 3.13a показывает, как протекает последовательность рекурсивных вызовов до тех пор, пока не будет вычислен 1! = 1, что приведет к завершению рекурсии. Рис. 3.136 показывает значения, возвращаемые из каждого рекурсивного вызова оператору вызова до тех пор, пока не будет вычислено и возвращено окончательное значение.

5! = 5 * 24 = 120 возвращается

4! = 4 * 6 = 24 возвращается

3! = 3 * 2 = 6 возвращается

2! = 2 * 1 = 2 возвращается

2

«1!

А

возвращено

а) Процесс рекурсивных вызовов