当前位置: 代码迷 >> J2SE >> 新人Fibonacci数列非递归程序有关问题
  详细解决方案

新人Fibonacci数列非递归程序有关问题

热度:168   发布时间:2016-04-23 20:19:35.0
新人Fibonacci数列非递归程序问题
这是我编的,但是运行后什么结果无限打印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);

}
}

------解决思路----------------------
引用:
http://90chuanlin.blog.163.com/blog/static/404299292012913105539477/

看了下这个地址提供的方法还是有问题的
稍微改了下
/**
 * 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