Паскаль. Основы программирования


Рекурсия - часть 3


 

При каждом входе в рекурсивную подпрограмму ее локальные переменные размещаются в особым образом организованной области памяти, называемой программным стеком.

Программа

 

Program Problem10;

    uses WinCrt;

    var

        n : integer;

        f : real;

{---------------------------------------------------------------------------------------}

    Procedure fac(n : integer; var f : real);

        begin

           if (n=0) or (n=1) then f := 1

                                       else

                                          begin

                                              fac(n - 1, f);

                                              f := f*n

                                          end

        end;

{---------------------------------------------------------------------------------------}

    begin

       write('Введите натуральное значение n '); readln(n);

       fac(n, f);

       writeln('Факториал числа ', n, ' равен ', f:12:0)

    end.

Турбо-Паскаль 7 или 6 дает очень удобную возможность пошаговой трассировки программы и процедуру. Для этого достаточно последовательно нажимать клавишу F7 и вы сможете полностью убедиться в правильности наших соображений.

Рекурсивная форма организации подпрограммы обычно выглядит изящнее итерационной (последовательной) и дает более компактный текст программы, но при выполнении, как правило, медленнее и может вызвать переполнение стека.

Как избавиться от этой неприятности вы узнаете позже. Но стоит знать, что при зацикливании программы следует выйти из нее нажатием <Ctrl>+<Z>+<Enter> (<Ввод>) (для Турбо-Паскаля 7 или 6).

Еще примеры с использованием рекурсивных процедур.

Пример 11. Над цепью озер летела стая белых гусей. На каждом озере садилось половина гусей и еще полгуся, а остальные летели дальше. Все гуси сели на семи озерах. Сколько гусей было в стае?

Решение

Математически задача решается устно очень остроумным способом.

Пусть вместе со стаей белых гусей все время летит еще один, Серый гусь.


Начало  Назад  Вперед



Книжный магазин