1

我想改变下面的代码来做阶乘。任何人都可以帮助我吗?这就是斐波那契。

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)
4

1 回答 1

2

斐波那契实际上比阶乘复杂,只是因为您必须记住前两项才能获得下一项。

然而,本质是一样的。使用阶乘,您只需将从 1 到您的参数的所有数字相乘,例如在以下伪代码中:

fact = 1
for i = 1 to argument:
    fact = fact * i

而已。您现在只需将其转换为 Algol,并且可能考虑在某个地方使用现代的语言的课程 :-) 尽管我必须喜欢一种使用bash-styleif/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;

我已将返回类型从voidto更改为int并希望我没记错返回值是自动从最后一个评估的表达式中获取的。

于 2013-04-11T03:54:52.767 回答