主要功能有误,但我不知道该怎么办。如果我使用调试器检查代码,我可以看到我的代码现在甚至没有到达fibonacci函数。

public class Fibonacci {
    public static void main(String[] args) {
        for (int n=1; n<50; n++) {
            System.out.println("Element "+ n + " of the sequence: " + newFib(n));
        }
    }

    public static ArrayList<BigInteger> memo = new ArrayList<BigInteger>();

    static BigInteger newFib(int n){
        assert n >= 1: "the fibonacci sequence starts at 1";
        BigInteger result=BigInteger.valueOf(1);

        if (memo.get(n) != null) {
            return memo.get(n);
        }
        else if( n  == 1  || n  ==  2 ) {
            memo.add(n, BigInteger.valueOf(1));
            return BigInteger.valueOf(1);
        }
        else {
            result= newFib(n-1).add(newFib(n-2));
            memo.add(n,result);
            return result;
        }
    }
}

最佳答案

您的代码抛出了一些异常。您只需要调试异常并实施适当的检查。将代码与这些更改一起使用应该可以正常工作:

import java.math.*;
import java.util.ArrayList;
public class Fibonacci {

    public static void main(String[] args) {
        for (int n=1; n<50; n++) {
        System.out.println("Element "+ n + " of the sequence: " + newFib(n));
        }

    }

    public static ArrayList<BigInteger> memo = new ArrayList<BigInteger>();
        static BigInteger newFib(int n){
            assert n >= 1: "the fibonacci sequence starts at 1";
            BigInteger result=BigInteger.valueOf(1);

            if (memo.size() - 1 >= n && memo.get(n) != null) {
                return memo.get(n);
            }
            else if( n  == 1  || n  ==  2 ) {
                memo.add(n-1, BigInteger.valueOf(1));
                return BigInteger.valueOf(1);
            }
            else {
                result= newFib(n-1).add(newFib(n-2));
                memo.add(n,result);
                return result;
            }
        }
}

10-06 10:45
查看更多