首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Algol 68中的迭代阶乘

Algol 68中的迭代阶乘
EN

Stack Overflow用户
提问于 2013-04-11 11:48:37
回答 1查看 374关注 0票数 1

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2013-04-11 11:54:53

Fibonacci实际上比阶乘更复杂,因为你必须记住前两项才能得到下一项。

然而,本质是相同的。使用factorial,您只需将从1到参数的所有数字相乘,如以下伪代码所示:

代码语言:javascript
复制
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编译器,所以它可能需要一些调试):

代码语言:javascript
复制
PROC facto = (INT n) INT:
  BEGIN
     INT a := 1;
     FOR i FROM 1 TO n DO
        a := a * i;
     OD
 END;

我已经将返回类型从void更改为int,希望我能正确记住返回值是从上次计算的表达式中自动获得的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15940416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档