1

我正在尝试编写一个可以在斐波那契型数列中找到第 n 项的程序(顺便说一下,它必须是非递归的)。它必须能够从用户那里获取任意两个数字,并将它们用作前两个术语。

例如,如果用户输入 f1 = 2 和 f2 = 3,则系列为 2、3、5、8、13、21 等。

用户还可以输入他们想要提出的术语。

我已经完成了大部分程序(我认为),但我有两个问题

  1. 当找到第 n 项时,程序必须将 f1 和 f2 计为第 1 项和第 2 项。我无法做到这一点,它将第 3 个数字计为第一个
  2. 该程序打印出直到第 n 项的所有数字,但我希望它只打印出第 n 项

我已经有一段时间了,我对 Java 很陌生,两年前我参加了一个介绍课程,现在我在下一堂课,遇到了一些麻烦,所以任何帮助都是赞赏!

import java.util.Scanner;
public class fibs
{
  public static void main(String[] args)
  {
    Scanner keyboard = new Scanner(System.in); // readying keyboard for input
    int f1, f2, n, fib;
    System.out.println("Please enter a vaule for F(1):");
    f1 = keyboard.nextInt();
    System.out.println("Please enter a vaule for F(2):");
    f2 = keyboard.nextInt();
    System.out.println("Please enter a vaule for n :");
    n = keyboard.nextInt();

    if ((f1<0)||(f2<0)||(f1>1000)||(f2>1000)||(n<1))
    {
      System.out.println("Please try again");
      return;
    }
    else
    {
      int i;
      for (i=0; i<n; i++)
      {

        fib=f1+f2;
        f1=f2;
        f2=fib;
        System.out.println( fib );

      }


    }
  }
}
4

2 回答 2

1

第二个问题的解决方案只需键入System.out.println(fib); 在循环之外。所以会直接显示fib的最终值。我无法理解你的第一个问题!

初始化 fib ( int fib = 0 ) 您还可以使用 for 循环声明变量。所以不需要在 for 循环之前声明 i 。只需在 for 循环中声明它

for (int i=2; i<n; i++)  
{  
    fib=f1+f2;  
    f1=f2;  
    f2=fib;  
}  

System.out.println( fib );

完整代码

import java.util.Scanner;  
public class fibs  
{  
 public static void main(String[] args)  
 {  
  Scanner keyboard = new Scanner(System.in); // readying keyboard for input  
  int f1, f2, n, fib = 0;  
  System.out.println("Please enter a vaule for F(1):");  
  f1 = keyboard.nextInt();  
  System.out.println("Please enter a vaule for F(2):");  
  f2 = keyboard.nextInt();  
  System.out.println("Please enter a vaule for n :");  
  n = keyboard.nextInt();  

  if ((f1<0)||(f2<0)||(f1>1000)||(f2>1000)||(n<1))  
  {  
   System.out.println("Please try again");  
   return;  
  }  
  else  
  {  
   for (int i=2; i<n; i++)  
   {  
    fib=f1+f2;  
    f1=f2;  
    f2=fib;        
   }
   System.out.println( fib );  
  }  
 }  
}
于 2013-01-27T22:26:49.503 回答
0

1)从2开始你的循环:

for (i=2; i<n; i++)

2) 将对 println() 的调用置于循环之外。

for (i=2; i<n; i++)  
{  
    fib=f1+f2;  
    f1=f2;  
    f2=fib;  
}
System.out.println(fib);
于 2013-01-27T22:27:44.513 回答