2016-12-02 9 views
-1

ФункцияФункция в прологе с возвратом

backtracking function f(n,k)

или

f(n, k) = n * k,   if n = k 
     = n ∗ f(n−1, k), if n > k 
     = k ∗ f(n, k−1), if n < k 

Пролог предикат fn/3 правопреемником в целях реализации вышеупомянутой функции

Можете ли вы помочь мне решить выше функции? Спасибо

+0

Отметьте [этот вопрос] (http://stackoverflow.com/q/40920830/1812457) для примера того, как спросить, и идеи, как решить его самостоятельно. –

+0

Что вы сейчас надумали? – max66

ответ

0

Вы можете попробовать следующие предикаты.

f(N, K, R):- 
    N = K , 
    R is N*K,!. 

f(N, K, R):- 
    N>K, 
    Nx is N-1, 
    f(Nx,K,Res), 
    R is N*Res. 

f(N, K, R):- 
    N<K, 
    Kx is K-1, 
    f(N,Kx,Res), 
    R is K * Res. 

У R будет результат, который вы хотели.

+0

Большое спасибо, он отлично работает –