尾递归幂Erlang

uemypmqf  于 2022-12-08  发布在  Erlang
关注(0)|答案(1)|浏览(139)

我有一个疑问,我必须对这个幂函数做一个尾递归

pow(_, 0) -> 1;
pow(N, X) when X > 0 -> N * pow(N, X - 1).

我读过,但我不完全明白,谁能解释一下,尾递归中的这个函数?

smtd7mpg

smtd7mpg1#

基本上,在尾部递归中,你需要一个另一个参数作为累加器。

%% So the first step is to convert the pow function to the pow_tail function, and initialize the accumulator to the default value. 

pow(N, X) -> pow_tail(N, X, 1);

%% Defined the base case for the pow_tail, to return the accumulator

pow_tail(_, 0, ACC) -> ACC;

%% Write the pow_tail function and store the result in the accumulator

pow_tail(N, X, ACC) when X > 0 -> pow_tail(N, X-1, ACC * N);

希望这能给你一个想法如何可以做到这一点。

相关问题