我假设将下面的代码更改为阶乘。有人能帮我吗?这是斐波纳契数。
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)发布于 2013-04-11 11:54:53
Fibonacci实际上比阶乘更复杂,因为你必须记住前两项才能得到下一项。
然而,本质是相同的。使用factorial,您只需将从1到参数的所有数字相乘,如以下伪代码所示:
fact = 1
for i = 1 to argument:
fact = fact * i就这样。你现在只需要把它转换成Algol,也许可以考虑一门使用稍微更现代的语言的课程:-)尽管我很喜欢一门使用bash-style if/fi case/esac methods for do loops (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,希望我能正确记住返回值是从上次计算的表达式中自动获得的。
https://stackoverflow.com/questions/15940416
复制相似问题