2012-10-14 17 views
2

所以我有一个作业来制作算法的流程图,首先打印斐波纳契序列的N个项。这并不难,当然,但老师告诉我们,这可以在六个流程图“气球”中完成。这就是问题所在 - 我想这样做,但我似乎无法做到......也就是说,我认为最简单的方法是检查N> 2 - 如果不是,我们必须检查是否它是1或2,分别打印0或1。只有在这之后,我们才能使用“常规”F(n)= F(n-1)+ F(n-2)公式 - 否则它会崩溃。写更正式:在6个流程图“气球”中调整斐波纳契?

  1. 输入的N
  2. N> 2?
    • 否:检查是否为1.如果是,则打印0并停止。
    • 否:检查是否为2.如果是,则打印0和1并停止。
    • 是:前往3
  3. 让我= 3。而我N:fib(i)= fib(i-1)+ fib(i-2)和print fib(i)。
  4. 停止。

问题是,我想这将需要10箱附近的东西,如果不是更多。那么最简单的方法是什么?我在网上找到的所有算法都倾向于假定我们只能得到2以上的N,但情况可能并非如此。能否请你帮忙?

编辑:好的,我把它调整,以8盒,并认为这是小到一个可以走了。 (分别为:第(n-2)个和第(n-1)个系列的术语)

  1. 输入N
  2. 让较旧= 0,年轻= 1:这样的事情,电流= 1, I = 2。
  3. 是N < = 1?
    • 是:输出旧的,结束的。
    • 否:前往4
  4. 输出年龄较大,年龄较小。
  5. i < N?
    • 是:当前=年龄较大,年龄较小=年轻,年轻=当前,i + = 1。打印当前,请转至5.
    • 否:结束。

这里能做些什么调整吗?

回答

2
  1. 输入Ñ
  2. 设(X1X2)=(0,1)
  3. Ñ ≤ 0?
    • 是:停止
    • 号:进至步骤4
  4. 打印X1
  5. 设(X1X2Ñ)=(X2x1 + x2N - 1),并继续执行步骤3.

如果“停止”需要将自己的一步,这将使步骤6

+1

括号将使其减少混乱:'(X1,X2, N)=(x2,x1 + x2,N - 1)' – anatolyg

+0

对,你太棒了!非常感谢 :) –