Построить рекурсивную функцию - Prolog
Формулировка задачи:
Вот задание:Построить рекурсивную функция для вычисления n-го члена последовательности, в которой каждый четный член равен сумме двух предыдущих четных, а нечетный равен сумме двух предыдущих нечетных. Первые четыре члена равны соответственно 1, 2, 3, 4.
1 2 3 4 4 6 7 10 11 16 18 ...
Вот код:
Помогите исправить ошибку и доделать!
Решение задачи: «Построить рекурсивную функцию»
textual
Листинг программы
predicates loop(integer, integer) table(integer) f(integer, integer) clauses f(1,R) :- R=1. f(2,R) :- R=2. f(3,R) :- R=3. f(4,R) :- R=4. f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M. loop(From, To) :- From > To, !. loop(From, To) :- table(From), Next = From + 1, loop(Next, To). table(N) :- f(N, X), write("f(", N, ") = ", X), nl. goal loop(1,15).
Объяснение кода листинга программы
В этом коде используется язык программирования Prolog. Он содержит несколько утверждений или правил, которые определяют, как программа должна работать. Здесь есть три типа утверждений:
- Утверждение
f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.
определяет рекурсивную функцию f, которая принимает два аргумента, I и R. Если I больше 4, то это означает, что мы должны вызвать функцию f для I-2 и I-4, и затем присвоить результат сумме результатов этих двух вызовов функции f и переменной R. - Утверждение
loop(From, To) :- From > To, !.
определяет условие для цикла loop. Если значение переменной From больше значения переменной To, то это означает, что цикл должен завершиться. - Утверждение
loop(From, To) :- table(From), Next = From + 1, loop(Next, To).
определяет условие для цикла loop. Если значение переменной From не больше значения переменной To, то это означает, что мы должны вывести значение переменной From и затем вызвать функцию loop для следующей итерации цикла с переменной Next, равной From+1. - Утверждение
table(N) :- f(N, X), write(
f(, N,
) = `, X), nl. определяет функцию table, которая принимает один аргумент N. Она выводит значение переменной X, которое было возвращено функцией f для аргумента N, и затем выводит новую строку. - В конце кода есть цель
loop(1,15)
, которая вызывает функцию loop с аргументами 1 и 15. Вот список ключевых элементов кода с их номерами: - Утверждение f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M. (4)
- Утверждение loop(From, To) :- From > To, !. (5)
- Утверждение loop(From, To) :- table(From), Next = From + 1, loop(Next, To). (6)
- Утверждение table(N) :- f(N, X), write(
f(
, N,) =
, X), nl. (7) - Цель loop(1,15). (20)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д