簡體   English   中英

循環查找斐波那契數列中的第n個項

[英]making a loop to find the nth term in fibonacci sequence

我正在嘗試編寫一個程序,該程序可以在斐波那契類型系列中找到第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 );

      }


    }
  }
}

第二個問題的解決方案Just Type 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 );  
  }  
 }  
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM