我认为将下面的代码更改为factorial。有人可以帮我吗? 这是斐波那契。
PROC print fibo = (INT n) VOID:
BEGIN
INT a:= 0, b = 1;
FOR i FROM 1 TO n DO
print((whole(i,0), "==>", whole(b,0), new line));
INT c = a + b;
a := b;
b := c
OD
END;
INT k = 40;
print("Compute Factorial");
print((whole(k,0), new line));
print fact(k)
答案 0 :(得分:2)
Fibonacci实际上更多复杂而不是阶乘,只是因为你必须记住前两个术语以获得下一个术语。
然而,本质是一样的。使用阶乘,您只需将所有数字从1乘以您的参数,例如在以下伪代码中:
fact = 1
for i = 1 to argument:
fact = fact * i
就是这样。你现在只需将它变成Algol,也许可以考虑使用稍微更现代语言的某个地方:-)虽然我必须喜欢使用bash
的语言 - if/fi
循环(case/esac
)的样式do
do/od
方法。我希望下一个bash
迭代使用此而不是不一致的do/done
。
下面的剧透!如果这是课程作业,请在阅读上述建议后再阅读。
我敦促你自己尝试一下,因为它会让你成为一个更好的程序员,并且(假设这是课程作业)使你不太可能因剽窃而受到惩罚。
然而,为了使这个答案完整,这将是我的第一次尝试(请记住,我实际上并没有 一个Algol-68编译器浮动,所以它可能需要一些调试):< / p>
PROC facto = (INT n) INT:
BEGIN
INT a := 1;
FOR i FROM 1 TO n DO
a := a * i;
OD
END;
我已将返回类型从void
更改为int
,并希望我能够正确记住返回值是从上次评估的表达式中自动获取的。