Algol的迭代阶乘



我假设将下面的代码更改为做阶乘。有人能帮我吗?这是斐波那契

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,并希望我正确地记住,返回值是自动从最后计算的表达式中获取的。

最新更新