Итеративный Алгоритм

  • Автор темы -
  • Дата начала

Гость
#1
Ребята, помогите пожалуйста.
Вот задача нахождения факториала на VIP v5.2 по итеративному алгоритму:

prolog Код:
predicates
factorial(unsigned, long)
factorial(unsigned, long, unsigned, long)
clauses
factorial(N, FactN) :-
factorial(N, FactN, 1, 1).
factorial(N, FactN, N, FactN) :- !.
factorial(N, FactN, I, P) :-
NewI = I+1,
NewP = P*NewI,
factorial(N, FactN, NewI, NewP).
goal
X=3,
factorial (X, FactX).

А мне нужно решить задачу нахождения суммы ряда ряда
s=1/sin1 + 1/(sin1+sin2) + ... +1/(sin1+sin2+...sinN), где N - натуральное число, тоже итеративным алгоритмом. Препод говорит что решение очень похоже на нахождение факториала, нужно только немного изменить.
Кто может, помогите.
 
R

rrrFer

Гость
#2
подскажу, предикат должен быть описан так:
p( NL, N, S, R )

0 - ограничение для аргумента синуса
1 - аргумент синуса
2 - сумма члена ряда( sin1+sin2+...sinN )
3 - результат работы
работать как то так:

Код:
p( N, N, _, 0 ):-!.
p( N, I, S, R ):-
II = I + 1,
SS = S + sin(I),
p( N, II, SS, RR ),
R = RR + 1 / SS.
не проверял