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

Тема в разделе "Другие", создана пользователем diman545, 31 мар 2014.

  1. diman545

    diman545 New Member

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

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

Поделиться этой страницей