Algol中的迭代因子68

时间:2013-04-11 03:48:37

标签: algol68

我认为将下面的代码更改为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)

1 个答案:

答案 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,并希望我能够正确记住返回值是从上次评估的表达式中自动获取的。