ОБСУЖДЕНИЕ

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

0 ответов 3,5 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

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

% Вычисление значения 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).
Надеюсь на вашу помощь)