0

我正在尝试编写一个调用斐波那契方法并打印斐波那契序列中的前 25 个数字的 for 循环。问题是我对如何正确地做到这一点有点困惑。

我对 run 方法中的 for 循环何时调用 fibonacci 方法感到有点困惑,在 for 循环的到达传递之后,fibonacci 方法中的值是否会重置?因此,例如在 for 循环的第一次通过期间,i = 0 并且 int a 和 int b 的值在 fibonacci 方法内发生变化。fibonacci 方法中的值是否在 for 循环的下一次通过时重置?

import acm.program.*;

public class Fibonacci extends ConsoleProgram{
private void run(){

  for(int i = 0; i <= 25; i++){
    fibonacci(i);
    println(fibonacci(i));
   }


}
 private int fibonacci(int n){
   int n = 0;

   int a = 0; 
   int b = 1;

   while (n < 25);

   int c = a + b;
   a = b;
   b = c;

     }
   return(a);

}
4

4 回答 4

1

你在两个不同的地方循环 -run()fibonacci(). 这些地方只有一个应该关心循环,另一个应该关心计算 Fibonacci(n)。

我们可以做的是从 中删除循环fibonacci,并且只依赖外部的循环。此外,我们将删除该语句int n = 0,因为它会影响您传入的参数。

最后,我们将创建两个新的静态变量ab,以便在此实例中保留它们的值。如果您不这样做,那么您将不得不依靠递归或其他一些方法来提供适当的aand值b

我不完全确定您为什么需要 extend ConsoleProgram,但我暂时将其保留。

所以,这就是它应该是什么样子。

public class Fibonacci extends ConsoleProgram {
    static int a = 0;
    static int b = 1;

    public void run() {
        for(int i = 0; i <= 25; i++) {
            // Print the call to fibonacci(i) with every iteration.
        }
    }

    private int fibonacci(int n) {
        int c = a + b;
        a = b;
        b = c;
        return c;
    }
}
于 2013-05-06T01:47:52.157 回答
1

斐波那契它是一个典型的算法示例,可以很容易地通过递归来接近,这是因为:

  • 您可以将整个斐波那契数列分步划分,
  • 在每个步骤中,您必须做同样的事情,除了最后一步您得到 0,
  • 最后一步是“特殊的”,因为任何数字的 0 次都会给你 0,

因此,如果您应用与之前相同的步骤,您只需取消所有内容,这意味着当您的计数器为 0 时,您必须执行与之前的步骤不同的操作,它是:

  • 将存储的结果乘以 1 而不是 0(或者您可以保持原样,这与乘以 1 相同
  • 退出循环并终止斐波那契数列

互联网上到处都是斐波那契的例子,12对你来说已经足够了。

于 2013-05-06T01:49:10.760 回答
0

为循环的每次迭代重置变量。变量abc是仅在方法中“存在”的局部变量。对该方法的每次调用都fibonacci(n)应该从斐波那契数列的开头开始,并打印出直到第 n 个术语。因此,while (n < 25);不应该是方法的一部分。此外,int n = 0将 n 重置为零,这很糟糕,因为我们需要知道 n 是多少才能获得第 n 项。

执行此循环的理想方法是:

private void fibonacci(int n) {
    int i = 1; // a new variable i to count from the 1st term
    int a = 0; // the first term
    int b = 1; // the second term

    while (i <= n) {
        int c = a + b; // the new value for b
        a = b; // switch the old a for the new a
        b = c; // get the (i + 1)th term for the next iteration
        System.out.println(a); // print out the ith term
        i++;
    }
}
于 2013-05-06T01:49:24.150 回答
-1

您没有存储 fibonacci() 的返回 int 值;

int currentSum=0;
for(int i = 0; i <= 25; i++){
currentSum+=fibonacci(i);
println(currentSum);

}

为什么你的 fibonacci(int n) 中有另一个变量 n ?请首先确保您的斐波那契方法有效。(无限while循环等)

public static void main (String args[]){
   for(int i = 0; i<25; i++) {
       System.out.println(fibonacci(i));  
   }

}

static int fibonacci(int n){
   if(n==0) {
       return 0;
   }
   int a = 0; 
   int b = 1;

   for(int i = 0; i < n; i++){
       int temp = b;
       b += a;
       a = temp;
   }

   return(b);
 }
于 2013-05-06T01:42:07.243 回答