做一个循环来找到斐波那契序列中的第n个项

时间:2013-01-27 22:17:07

标签: java loops sequence fibonacci

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

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

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

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

  1. 当找到第n个项目时,程序必须将f1和f2计为第1和第2项。我无法做到这一点,它将第3个数字视为第一个
  2. 程序会打印出第n个字词以外的所有数字,但我希望它只打印出第n个字词
  3. 我现在已经有一段时间了,我对Java很陌生,2年前我参加了一个介绍课,现在我在下一堂课了,有点麻烦,所以任何帮助将不胜感激!

    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 );
    
          }
    
    
        }
      }
    }
    

2 个答案:

答案 0 :(得分:1)

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

初始化fib(int fib = 0)你也可以用for循环声明变量。所以不需要在for循环之前声明我。只需在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 );  
  }  
 }  
}

答案 1 :(得分: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);