这是我编的,但是运行后什么结果无限打印79,不知道问题出在哪里,请大师指教
public class Fab {
public static void main(String[] agrs) {
int sum = 0;
for (int i=1; i>2; i++) {
if (i == 1 || i == 2) {
sum = 1;
System.out.println(sum);
} else {
sum = (i - 1) + (i - 2);
i = 40;
System.out.println(sum);
}
}
}
}
------解决思路----------------------
斐波那切是每一项等于前两项之和,你的程序里每一项等于前两项的标号之和。第40项肯定是39+38=77;
public class Test{
public static void main(String[] args){
int sum1 = 1;
int sum2 = 1;
int sum = 1;
for(int i=3;i<41;i++){
sum1 = sum2;
sum2 = sum;
sum = sum1+sum2;
}
System.out.println(sum);
}
}
------解决思路----------------------
看了下这个地址提供的方法还是有问题的
稍微改了下
/**
* F(1) = 1, F(2) = 1
* F(N) = F(N - 1) + F(N - 2)
*
* @author Administrator
*
*/
public class Fibonacci {
/**
* 用递归的方式实现Fibonacci
*
* @param n
* @return
*/
public int fibonacciRecursive(int n) {
if (n <= 2) {
return 1;
}
return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);
}
/**
* 用非递归的方式实现Fibonacci
*
* @param n
* @return
*/
public int finonacciNormal(int n) {
if (n <= 2) {
return 1;
}
int a1 = 1;
int a2 = 1;
int an = 0;
for (int i = 2; i < n; i++) {
an = a1 + a2;
a1 = a2;
a2 = an;
System.out.print(i+"=");
System.out.println(an);
}
return an;
}
public static void main(String[] args) {
Fibonacci fibonacci = new Fibonacci();
System.out.println("fibonacciRecursive==="
+ fibonacci.fibonacciRecursive(40));
System.out
.println("finonacciNormal===" + fibonacci.finonacciNormal(40));
}
------解决思路----------------------
package des;
public class FibonacciDemo {
public static long fib(int n) {
long f1 = 1, f2 = 1;
long m = 0;
if(n <= 2) {
return 1;
} else {
for(int i = 3; i <= n; i++) {
m = f1 + f2;
f2 = f1;
f1 = m;
}
return m;
}
}
public static void main(String [] args) {
long m = fib(40);
System.out.println("Fibonacci(40) is " + m);
}
}
结果:
Fibonacci(40) is 102334155