Prolog 解决这一类递归问题实在是极为简洁。
%% LCS
max(A,B,M) :- A > B,M is A.
max(A,B,M) :- A =< B,M is B.
lcs([],[],0).
lcs([],_,0).
lcs(_,[],0).
lcs(X,X,1).
lcs([A|R1],[A|R2],N) :-
lcs(R1,R2,N1),
N is N1+1.
lcs([A|R1],[B|R2],N) :-
lcs([A|R1],R2,N1),
lcs(R1,[B|R2],N2),
max(N1,N2,N).
%%end-of-code
%testing:
?- lcs([a,b,c,d,a],[a,a,b,d,e],N).
N = 3 ?
yes