TURBO PROLOG. Терёхин В.В. - 94 стр.

UptoLike

Составители: 

94
Sum = Number + Partial_Sum.
Правило рекурсии Сумма ряда 2
sum_series(1,1) :- !. /* сумма ряда */
sum_series(Number,Sum) :-
Next_number = Number - 1,
sum_series(Next_number, Partial_Sum),
Sum = Number + Partial_sum.
Результаты работы этих правил идентичны. Использование отсечения
(!) в Сумме ряда 2 не улучшает работы правила рекурсии. Эти два правила
следует рассматривать как альтернативные варианты.
* Упражнения
4.15. Модифицируйте программу Сумма ряда 2 так, чтобы она
вычисляла сумму следующего ряда целых четных чисел:
S(16) = 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16.
4.16.
Составьте таблицу обрабатываемых значений для преды-
дущей программы, показывающую работу правила рекурсии.
Листинг 4.11
_______________________________________________________________
/* Программа: Факториал */
/* Назначение: Демонстрация использования рекурсии для */
/* процедуры вычисления факториала N! */
/* положительного числа N. Процедура */
/* использует предикат cut для запрещения отката */
/* Пример: 7! = 7*6*5*4*3*2*1 = 5040 */
domains
number, product = integer
predicates
factorial(number, product)
goal
factorial(7,Result),
write(" 7! = ",Result),nl.
clauses
factorial(1,1) :- !.
factorial(Number,Result) :-
Next_number = Number -1,
facto-rial(Next_number,
Partial_factorial),
Result = Number * Partial_factorial.
_______________________________________________________________
                             Sum = Number + Partial_Sum.
       Правило рекурсии Сумма ряда 2
       sum_series(1,1) :- !.    /* сумма ряда */
       sum_series(Number,Sum) :-
                             Next_number = Number - 1,
                             sum_series(Next_number, Partial_Sum),
                             Sum = Number + Partial_sum.
       Результаты работы этих правил идентичны. Использование отсечения
(!) в Сумме ряда 2 не улучшает работы правила рекурсии. Эти два правила
следует рассматривать как альтернативные варианты.

* Упражнения
           4.15. Модифицируйте программу Сумма ряда 2 так, чтобы она
вычисляла сумму следующего ряда целых четных чисел:
           S(16) = 2 + 4 + 6 + 8 + 10 + 12 + 14 + 16.
           4.16. Составьте таблицу обрабатываемых значений для преды-
дущей программы, показывающую работу правила рекурсии.

                          Листинг 4.11
_______________________________________________________________
/* Программа: Факториал */
 /* Назначение: Демонстрация использования рекурсии для */
/*             процедуры вычисления факториала N!        */
/*             положительного числа N. Процедура         */
/*             использует предикат cut для запрещения отката */
/* Пример: 7! = 7*6*5*4*3*2*1 = 5040                      */

domains
    number, product = integer

predicates
      factorial(number, product)

goal
      factorial(7,Result),
                           write(" 7! = ",Result),nl.
clauses
      factorial(1,1) :- !.
      factorial(Number,Result) :-
                                 Next_number = Number -1,
                                 facto-rial(Next_number,
                                 Partial_factorial),
                                 Result = Number * Partial_factorial.
_______________________________________________________________



                                                                          94