此序言程序是否在尾递归中?

问题描述 投票:0回答:1

我想问这个程序是否是尾递归的,如何使它成为尾递归的?

euclidsqr([], [], 0).
euclidsqr([X|Xs], [Y|Ys], ED) :-
   euclidsqr(Xs, Ys, ED1),
   ED is ED1 + (X-Y)*(X-Y).
prolog tail-recursion
1个回答
1
投票

这里是相应的尾部递归版本:

euclidsqr(Xs, Ys, ED) :-
   euclidsqr(Xs, Ys, 0, ED).

euclidsqr([], [], ED,ED).
euclidsqr([X|Xs], [Y|Ys], ED0,ED) :-
   ED1 is ED0 + (X-Y)*(X-Y),
   euclidsqr(Xs, Ys, ED1,ED).
© www.soinside.com 2019 - 2024. All rights reserved.