斐波那契序列

时间:2013-02-10 01:27:17

标签: java

我对下面的代码有一点麻烦。我已经计算出每个循环的每个变量的值,我理解每个循环后每个变量的值如何变化,但我对int a = b的方式感到困惑。表示前两个值的总和。我被困在这个问题很长一段时间,只能通过反复试验解决问题。

我真的不明白int a = b;表示前两个值的总和。我确信因为int c = a + b;将变量a和变量b相加,这是我想在程序中打印的变量。你能解释一下int a如何表示前两个值的总和以及int c没有的原因。

public class Fibonacci extends ConsoleProgram{
   public void run(){
   int i = 0; 
   int a = 0;
   int b = 1; 

   while ( i <= 12) {

     println(a);
     i++;
     int c = a + b; 
     a = b; 
     b = c; 
      }
    }
  }

2 个答案:

答案 0 :(得分:5)

我喜欢把它想象成一个楼梯:

    0
0 + 1 = 1
    1 + 1 = 2
        1 + 2 = 3
            2 + 3 = 5
                3 + 5 = 8
                    5 + 8 = 13

任意步骤如下:

a + b = c
    b + c = d

完成一步后,c的行为与bb的行为类似a。但是ad呢?由于您的解决方案是迭代的,您只需说a变为d并在循环中重复该过程:

a + b = c
|   b + c = a
|___________|

或代码:

int a = 0;
int b = 1;
int c = 0;

while (true) {
    c = a + b;  // `a + b = c` isn't valid, so you have to flip it around.
    a = b;      // `b` "becomes" `a`
    b = c;      // `c` "becomes" `b`
    c = a;      //  You don't need this step because `c` is just a temp variable
}

答案 1 :(得分:4)

所以这个程序会发生什么:

a = 0,b = 1

c设置为它们的总和,= 1

a设置为b,= 1

b设置为c,= 1

a = 1,b = 1

c设置为它们的总和,= 2

a设置为b,= 1

b设置为c,= 2

a = 1,b = 2

c设置为它们的总和,= 3

a设置为b,= 2

b设置为c,= 3

a = 2,b = 3

c设置为它们的总和,= 5

a设置为b,= 3

b设置为c,= 5

a = 3,b = 5

......等等。你应该明白这一点:)