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

我在面试中遇到了这个问题。直到面试官希望我不要使用我在打印方法中使用的循环这一部分很容易。术语数是一个输入,当它为7时,例如:print 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();
    }
}
艾略特·新鲜

大概您可以进行递归print就是这个-

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

可能是这样的,

public void print() {
  print(a.length - 1);
}

public void print(int i) {
  if (i > 0) {
    System.out.println(fib(i - 1));
    print(i - 1);
  }
}

当我运行上面的代码时,我得到了请求的输出

13
8
5
3
2
1
1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章