java - 如何在不使用循环的情况下以相反的顺序打印斐波那契数列

标签 java algorithm

我在面试中遇到了这个问题。直到面试官要我不要使用我在 print 方法中使用的循环的部分,这很容易。项数是一个输入,当它是 7 时,例如:打印 13 8 5 3 2 1 1。他说这在 Python 中很容易,但我也可以用 Java 编写机制,但我想不出他可能是哪种机制指的是。谢谢!

我的 Java 代码:

public class Fibonacci {
    private int[] a;

    private int fib(int i) {
        assert (i>=0);

        if (a[i]==0) {
            if (i==0 || i==1) {
                a[i] = 1;
            } else {
                a[i] = fib(i - 2) + fib(i - 1);
            }
        }

        return a[i];
    }

    public Fibonacci(int numberTerms) {
        if (numberTerms<2) throw new IllegalArgumentException("expect at least 2 terms for a Fibonacci sequence");
        a = new int[numberTerms];
    }

    public void print() {
        for (int i=a.length; i!=0; i--) {
            System.out.println(fib(i-1));
        }
    }

    public static void main(String[] args) {
        Fibonacci f = new Fibonacci(7);
        f.print();
    }
}

最佳答案

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

static void printReversedFib(int x){
    if(x <= 1)
        System.out.println(f(x));
    else{
        System.out.println(f(x));
        printReverseFib(x-1);
    }
}

使用 printReversedFib(7); 进行测试将打印:

13
8
5
3
2
1
1

关于java - 如何在不使用循环的情况下以相反的顺序打印斐波那契数列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25836313/

相关文章:

algorithm - 回文递归算法的时间复杂度

java - HQL:LIKE 在空关系中

java - 什么是 Futures.transform() lambda 参数,以防原始 ApiFuture/ListenableFuture 失败或取消

java - 如何在 JavaFX 中将图像设置为按钮的大小

java - 如何从 Java 8 中的 getAnnotatedParameterTypes() 获取泛型类型信息?

c++ - 生成具有自定义分布的序列

java - Spark 中的 DataFrame 到 Json 数组

c - 为什么我在这个问题上得到了错误的答案(Uva OJ 455)

c++ - 是否可以编写一个像 next_permutation 这样的函数,但它只排列 r 值,而不是 n 值?

algorithm - 找到图中强制访问某些边而其他边不强制访问的最短路径