首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >fibonacci使用mathematica

fibonacci使用mathematica
EN

Stack Overflow用户
提问于 2017-02-07 03:56:48
回答 3查看 630关注 0票数 2

刚接触Mathematica时,我尝试使用Do循环打印出前50个斐波纳契数,但似乎无法实现。我知道有一个内置的函数可以返回给定一个数字的斐波那契数列,但我想用一个Do循环来实现它。任何帮助都会非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2017-02-07 09:54:51

像这样的东西

代码语言:javascript
运行
复制
a = 0; b = 1; terms = {a, b};

Do[
  {a, b} = {b, a + b};
  terms = {terms, b},
  {50 - 2}
];

Flatten@terms

我相信还有更花哨的方法。

票数 2
EN

Stack Overflow用户

发布于 2017-02-07 17:41:56

来自An Introduction to Programming with Mathematica,第178页。

第七章:递归

代码语言:javascript
运行
复制
F[1] = 1;
F[2] = 1;
F[n_] := F[n - 2] + F[n - 1] /; n > 2

事实证明,条件/; n > 2是不必要的,因为Mathematica先查找特定规则,如F[1] = 1,然后再查找更一般的规则,如F[n]。下面是前十个斐波纳契数的表格。

代码语言:javascript
运行
复制
Table[F[i], {i, 1, 10}]

{1,1,2,3,5,8,13,21,34,55}

但是,为了获得足够速度,还应使用memoization

代码语言:javascript
运行
复制
F[1] = 1;
F[2] = 1;
F[n_] := F[n] = F[n - 2] + F[n - 1]

Table[F[i], {i, 1, 50}]

{1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,1134903170,1836311903,2971215073,4802675976,77742049,12586269025}

}

票数 1
EN

Stack Overflow用户

发布于 2017-02-07 22:31:42

使用Nest

代码语言:javascript
运行
复制
Nest[ Append[#, Total@#[[-2 ;;]]] &  , {1, 1}, 10]

{1,1,2,3,5,8,13,21,34,55,89,144}

使用Table

代码语言:javascript
运行
复制
Module[{last = 1, lastp = 1, next}, Join[{lastp, last},
  Table[next = last + lastp ; lastp = last ; last = next , {10}] ]]

{1,1,2,3,5,8,13,21,34,55,89,144}

使用Reap/SowDo

代码语言:javascript
运行
复制
Reap[Module[{last = 1, lastp = 1 }, Sow[lastp]; Sow[last];
   Do[  {lastp, last} = {last, Sow[last + lastp]} ; , {10}] ]][[2, 1]]

{1,1,2,3,5,8,13,21,34,55,89,144}

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

https://stackoverflow.com/questions/42076188

复制
相关文章

相似问题

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