Треугольник Паскаля

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

diman545

Добрый день! Возникла маленькая проблемка. Есть код программы, который по возможности надо разжевать) Собственно вот код:

% Вычисление значения K-ого элемента N-ой строки; E - результат
fact(0,0,P):p=1,!.
fact(_,0,P):p=1,!.
fact(B,B,P):p=1,!.
fact(B,M,P):-BM=B-M,M1=M+1,!,mul(B,BM,M1,1,1,P).
mul(B,NM,B,NM,P,PP):pP=P*B/NM.
mul(B,NM,IB,INM,P,P1):-IB1=IB+1,
!,INM1=INM+1,!,PP=P*IB/INM,!,mul(B,NM,IB1,INM1,PP,P1).

% Предикат вычисляющий N-ую строку
str(_,-1,Str,Rez):-concat(Str," \n ",Rez), !.%3: если строка построена добавляем перевод на новую строку и связываем несвязаную переменную Rez c str
%concat-склеивает стороки str c \n и помещает в rez
str(N,K,Str,Rez) :-fact(N,K,E),format(OutStr," % ",E),%если стр. не полностью сформир. то продолжаем ее сформировывать, вычисляя по формуле fact, иформируем в строку
concat(Str,OutStr,Str1),% %concat-склеивает стороки str c OutStr и помещает в Strl
KK=K-1,str(N,KK,Str1,Rez).%обратный счетчик, как только равно -1 переход в начало цикла

trip(N,N,Str,Rezult):- Rezult=Str,!. %2: если N1 = N2 , то в результат запишем str, возвращаемся на действие в кнопке
trip(N,Max,Str,Rezult):-str(N,N,Str,Rez),N1=N+1,!,trip(N1,M ax,Rez,Rezult).%N-текущ. стр, Max-максимум. стр, str-формиров. стр, N1-переход на след. стр, формирован. след. стр.

Объяснить надо следующее:
Какая тут используется рекурсия,восходящая или нисходящая?
mul(B,NM,IB,INM,P,P1):-IB1=IB+1,
!,INM1=INM+1,!,PP=P*IB/INM,!,mul(B,NM,IB1,INM1,PP,P1).
Надеюсь на вашу помощь)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!