打印出斐波纳契数字数组

问题描述 投票:0回答:2

我正在尝试编写一个递归算法来计算斐波那契数。但是,该程序在打印结果方面很费力。

我的想法是将每个计算出的值存储到数组中(因此算法应该更快)。

我想要的输出:

The fibonacci of n = 1 is fn= 1    
The fibonacci of n = 2 is fn= 2    
The fibonacci of n = 3 is fn= 2    
The fibonacci of n = 4 is fn= 3
...
The fibonacci of n = 8 is fn= 21
public class fibonacciCalculator {

    static int[] arr = new int[50];

    static int fibo (int n, int arr[]) {
        if ( n == 0 ) {
            return 0; 
        }else if ( n == 1 ) {
            return 1; 
        } 
        if ( arr[n-1] == 0) {
            arr[n-1] = fibo(n-1, arr);  
        }
        if ( arr[n-2] == 0) {
            arr[n-2] = fibo(n-2, arr);
        }
        return arr[n-1] + arr[n - 2];
    } 

    public static void main(String[] args) {

        for (int i = 1; i == 8; i++) {
            if (arr [i] == 0) {
                fibo(i, arr);
                int x = arr[i];
                String a = String.format("The fibonacci of n = %d is fn= %d", i , x);
                System.out.println(a);
                }
        }
    }
}
java arrays recursion printing fibonacci
2个回答
0
投票

您可以在不声明数组的情况下执行此操作。这样,中间值存储在执行堆栈中:

public class fibonacciCalculator {

    static int fibo (int n) {
        if ( n == 0 ) {
            return 0; 
        } else if ( n == 1 ) {
            return 1; 
        } else {
            return fibo(n-2) + fibo(n-1);  
        }
    } 

    public static void main(String[] args) {

        for (int i = 1; i <= 8; i++) {
            int x = fibo(i);;
            String a = String.format("The fibonacci of n = %d is fn= %d", i , x);
            System.out.println(a);
        }
    }
}

0
投票

这里是一种方法。

   public int[] fib(int values[], int count) {
      if (count <= 0) {
         return values;
      }

      int k = values.length + 1;
      values = Arrays.copyOf(values, k);

      values[k - 1] = values[k - 2] + values[k - 3];
      return fib(values, count - 1);
   }
© www.soinside.com 2019 - 2024. All rights reserved.