我知道为什么我的代码在前几个代码之后会给出错误的答案?
My university professor provided us with this to go by and I feel I followed it?
例如,如果我要使用:
test1.o
控制台打印出来: 11 34 20
当然不是那些地方的斐波那契数字
System.out.println(fibr(8));
System.out.println(fibr(9));
System.out.println(fibr(10));
帮助犯了什么错误
答案 0 :(得分:3)
您的代码很难阅读,实际上,这使得调试变得非常困难。尝试采用更简单的方法。以下是查找n-th
斐波纳契数的示例:
double fibbonaci(int n){
double prev = 0d, next = 1d, result = 0d;
for (int i = 0; i < n; i++) {
result = prev + next;
prev = next;
next = result;
}
return result;
}
此外,这个问题有一个更优雅的方法,涉及递归:
int fibonacci(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
修改强>
为了完全回答你的问题,你的错误在于计算甚至斐波纳契数。 fib(8) = 21, fib(9) = 34, fib(10) = 55
。
由于某些未知原因,您使用以下方法计算n-th
偶数斐波纳契数:
int a;
a = fibr((n/2)+1) + fibr((n/2)-1) * fibr(n/2);
return a;
通过Fibonacci序列,n-th
斐波那契数是前两个的总和。所以上面的代码可以变成:
return fibr(n - 1) + fibr(n - 2);
因此,您的整个功能可以简化为:
public static int fibr(int n) {
if (n <= 0) return 0;
if (n == 1) return 1;
if (n == 2) return 1;
return fibr(n - 1) + fibr(n - 2);
}
答案 1 :(得分:1)
如果您的教授希望您使用提供的公式,那么您应该像这样重写您的代码:
public class FibClass {
// main
public static void main(String[] args) {
System.out.println(fibr(7)); // Returns 13
}
// Fibonacci function
public static int fibr(int n) {
if ( n < 0 ) {
return 0; //returned value for negative integers
} else if (n == 0) {
return 0; //returned value for 0
} else if (n == 1) {
return 1; //1st number in the Fibonacci sequence
} else if (n == 2) {
return 1; //2nd number in the Fibonacci sequence
}
//is odd
else if (n >= 3 && !(n % 2 == 0)) {
int a;
a = (int) Math.pow(fibr((n + 1) / 2), 2);
a += (int) Math.pow(fibr((n - 1) / 2), 2);
return a;
}
//is even
else if (n >= 3 && (n % 2 == 0)) {
int a;
a = (fibr((n / 2) + 1) + fibr((n / 2) - 1)) * fibr(n / 2);
return a;
}
return 0;
} // END Fibonacci function fibr()
}
这是基于您在照片中提供的公式:
虽然有更简单的功能可以在Fibonacci sequence找到第n个数字。