我有一个目前正在工作的阶乘函数,但我所得到的结果不是我所需要的。
守则是:
declare
fun {Fact N}
if N==1 then [N]
else
Out={Fact N-1}in
N*Out.1|Out end
end
{Browse {Fact 4}}结果是:[24,6,2,1],但是我需要结果显示:[1,2,6,24]和我看不到错误在哪里。
发布于 2014-03-31 15:04:40
你想要减少N,没有其他的论点,只有N。
但有一个问题:
[1 2 6 24]实际上可以在oz中写成'|'(1 '|'(2 '|'(6 '|'(24 nil))))。
所以在第一次或最后一次调用时,您的函数必须返回24|nil.
但是,您的函数无法知道一个调用是第一个调用还是最后一个调用,因为您没有任何参数。这里是我能想到的最好的功能:
declare
fun {Fact N}
fun{Aux N Nmax FactNminus1}
if N>Nmax then nil
else (FactNminus1*N)|{Aux N+1 Nmax FactNminus1*N}
end
end
in
{Aux 1 N 1}
end
{Browse {Fact 4}}https://stackoverflow.com/questions/22748389
复制相似问题