4
public class Fibonacci {
    public static long fib(int n) {
        if (n <= 1) return n;
        else return fib(n-1) + fib(n-2);
    }

    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]);
        for (int i = 1; i <= N; i++)
            System.out.println(i + ": " + fib(i));
    }
}

ユーザーが「java Fibonacci 7」と入力したと仮定すると、結果は次のようになります。

1: 1
2: 1
3: 2
4: 3
5: 5
6: 8
7: 13

引数 3 から始めて、これがどのように機能するかについて完全に混乱しているようです。 fib(i) メソッドが 3 を渡された場合、n = 3 の場合は fib(n-1) の合計であるため、3 も返すべきではありません。 / n-1 は 2 です/ そして fib(n-2) / n-2 は 1 です/ は 3 です。その他の数字も同様です。

4

20 に答える 20

2
public static int f(int n){
    if (n <= 1) {
        return n;
    } else {
        return f(n - 1) + f(n - 2);
    }
}

public static void main(String[] args){
    Integer c = 4;
    Integer answer = f(c);
    System.out.println("Fibonacci " + c + "'s number is: " + answer);
}
于 2014-08-04T10:14:52.787 に答える
1

フィボナッチ数列のインデックス (n) とそのインデックスの実際の値を混同していると思います。fib(n=3) = fib(n-1=2) + fib(n-2=1) = 1 + 1 = 2

于 2013-09-27T07:34:08.833 に答える
1

why dont you try this easy code. It's same like we do in Fibonacci without recursion.

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);
        }
    }
} 
于 2013-09-27T07:35:06.487 に答える
1

2行でできる!

これを行うための最短の入力 (ただし、最も効率的ではありません):

    int fib( int x ) {
        return x > 1 ? fib(x - 1) + fib(x - 2) : x; }

高速なアルゴリズムが必要な場合は、これを試してください。

        ///fast version fibbonacci sequence.
        public static float fibonacci(int x){
           float[] sequence = new float[x];
           sequence[0] = 1;
           sequence[1] = 1;
          if (x > 1){
             for (int i = 2; i < x; i++){
               sequence[i] = sequence[i-1] + sequence[i-2];
             }
          }
          for (float z : sequence){
              System.out.print("{ " + z + "}, ");
          }
          return sequence[x-1];
        }
于 2016-02-08T23:23:12.950 に答える
0

フィボナッチ数は、前の連続した 2 つの数の合計を計算したものです。0 1 1 2 3 5 8... などで始まります。つまり、そのようなもの--

fib(3) = fib(2) + fib(1)
       = fib(1) + fib(0) + 1 //fib(1) = 1
       = 1 + 0 + 1 //fib(0) = 0
       = 2

再帰法は、スタックを使用する関数呼び出しを伴うため効率が低下します。また、より大きなフィボナッチ数を計算するために関数が頻繁に呼び出されると、スタック オーバーフローの可能性もあります。

于 2013-09-27T07:44:13.113 に答える
0
// using recurrsion
static void fibonacci_recurrsion2(int count, int first, int second) {
    while (count > 0) {
        int temp = second;
        if (first == 0) {
            System.out.print(first);
        }
        System.out.print("," + second);

        second = first + second;// fib(first, second);
        first = temp;
        fibonacci_recurrsion(count - 1, first, second);
    }
}

また

static void fibonacci_recurrsion(int count, int first, int second) {
        if (count >= 0) {
            System.out.print(first + ",");
            first = first + second;// fib(first, second);
            second = first - second;// fib(first, second);
            fibonacci_recurrsion(count - 1, first, second);
        }
    }
于 2021-09-13T03:51:50.960 に答える
0
import java.util.Scanner;
public class Fibonacci {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System. in );
        System.out.println("Enter a number upto which fibonacci numbers should be displayed");
        int fib = scn.nextInt();
        int a = 0,
        b = 1,
        res = 0;
        System.out.print(a + " " + b + " ");
        while (res <= fib) {
            res = a + b;
            a = b;
            b = res;
            if (res > fib) break;
            System.out.print(res + " ");
        }
    }
}
于 2019-12-07T09:55:50.390 に答える
-2
import java.util.Scanner;

public class Fibonacci2 {

    public static void main(String[]args){

        int a;
        try (Scanner sc = new Scanner(System.in)) {
            System.out.print("Number of Fibonacci numbers to print: ");
            a = sc.nextInt();
            sc.close();
        }
        int c=1; /*c current number b last number*/
        int b=0;
        System.out.println(b);
        System.out.println(c);
        int bb;
        for (int z = 2; z < a ; z++){
        bb = b; 
        b = c;
        c = bb + b; /*bb last last number*/
        System.out.println(z);

    }
    }
}
于 2014-12-06T12:03:31.823 に答える