我假设将下面的代码更改为做阶乘。有人能帮我吗?这是斐波那契
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)
斐波那契数列实际上比阶乘更复杂,因为您必须记住前两项才能得到下一项。
然而,本质是一样的。使用factorial,您只需将从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编译器浮动,所以它可能需要一些调试):
PROC facto = (INT n) INT:
BEGIN
INT a := 1;
FOR i FROM 1 TO n DO
a := a * i;
OD
END;
我已经将返回类型从void
更改为int
,并希望我正确地记住,返回值是自动从最后计算的表达式中获取的。