我在面试中遇到了这个问题。直到面试官要我不要使用我在 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/