2013-03-16 57 views
0

我不明白我應該做什麼。我的教授希望我們用遞歸創建一個斐波那契數列。不允許循環,我(作爲一個業餘愛好者)不知道如何創建一個字符串,6個數字順序。Java中的Fibonacci遞歸 - 不適用於循環?

以下是他的指導:「使用遞歸創建一個返回包含斐波那契數列的字符串的方法。取一個整數來確定您應該返回的序列的數量。

這是我迄今爲止...

import java.util.*; 

public class fibo { 

    public final static int n = 0; 
    public static String s = ""; 

    public static void main(String[] args) { 

    Scanner scn = new Scanner (System.in); 

    System.out.println("Please put in a number."); 

    int n = scn.nextInt(); 

    s = Integer.toString(n); 

    System.out.println(n+ ": " + fibonacci(n)); 
    } 

    public static int fibonacci(int n) { 

    if(n <= 1) 
     return n; 

    else  
     return fibonacci(n - 1) + fibonacci(n - 2); 
    } 
} 

除此之外,我覺得有很多真的是低效和混亂。有人能真正解釋和幫助我應該做什麼嗎?

+0

看起來它可能正在做你所問過的。我懷疑效率可能會晚一些。這不是我如何處理負值,無可否認...... – 2013-03-16 14:21:16

回答

1

看起來您正在生成Fibonacci序列中的第n個數字,在我看來,您需要存儲所有正在生成的值(而不僅僅是最後一個)並顯示它們。

因此,您不需要完成f(n)即可完成作業,而只需顯示f(1), f(2), ..., f(n-1), f(n)即可。

+0

不僅如此,創建序列應該包含在遞歸函數中。將它作爲一個單獨的,也是遞歸的函數是可能的,以避開「無循環」的要求,而且這當然會更容易,因爲將它捆綁成一個函數會給你帶來很多混亂的狀態在參數中。 – 2013-09-01 01:41:08

0

此代碼顯示斐波那契數,直到8沒有任何環......

public class FinnonnacciDemo2 { 

    static int no = 0, n = 8; 

    public static void main(String[] args) { 
     // This will print series till 8 
     fib(0, 1); 
    } 

    public static void fib(int a, int b) { 
     // Terminating condition. 
     if (a >= n) { 
      return; 
     } 

     else { 
      System.out.print("\t" + no); 
      no = a + b; 
      a = b; 
      b = no; 
      fib(a, b); 
     } 
    } 
} 
0

這裏是一個很好的工作,沒有不必要的代碼代碼。

import java.util.*; 

public class Fibonaccis { 



    public static void main(String[] args) { 

    Scanner scn = new Scanner (System.in); 

    System.out.println("Lägg in ett nummer."); 

    int n = scn.nextInt(); 



    System.out.println(n+ ": " + fibonacci(n)); 
    } 

// TODO Auto-generated method stub 

    public static int fibonacci(int n) { 

    if(n <= 1) 
     return n; 

    else  
     return fibonacci(n - 1) + fibonacci(n - 2); 
    } 
}