Java Fibonacci动态规划

Java Fibonacci动态规划,java,recursion,dynamic-programming,fibonacci,Java,Recursion,Dynamic Programming,Fibonacci,我正在尝试编写一个稍加修改的斐波那契代码 此处n=(n-1)^2+(n-2) 这是我的密码 public static int fibonacci(int first, int second, int n){ int[] memo = new int[n + 1]; for(int i=0; i<= n; i++){ memo[i] = -1; } return fibonacci(first, second, n, memo); } p

我正在尝试编写一个稍加修改的斐波那契代码

此处
n=(n-1)^2+(n-2)

这是我的密码

public static int fibonacci(int first, int second, int n){
    int[] memo = new int[n + 1];
    for(int i=0; i<= n; i++){
        memo[i] = -1;
    }
    return fibonacci(first, second, n, memo);

}

public static int fibonacci(int first, int second, int n, int[] memo){
    if(n == first || n == second) return n;

    if(memo[n] < 0) memo[n] =  (int)Math.pow(fibonacci(first, second, n-1, memo), 2) + fibonacci(first, second, n-2, memo);

    return memo[n];
}
公共静态int-fibonacci(int-first,int-second,int-n){
int[]备忘录=新的int[n+1];

对于(inti=0;i,代码中有一个逻辑错误

first
second
是序列中第一个和第二个项的值,
n
是要查找的值的索引。但是在这里,您将索引和值进行比较,这是错误的:

    if(n == first){
        return memo[n] = first;

    }
    if(n == second) return memo[n] = second;
应该是:

    if(n == 1){
        return memo[n] = first;

    }
    if(n == 2) return memo[n] = second;

你可以编辑你的问题,使其更具体地说明你的问题是什么。提供你期望得到的和你实际得到的示例。在代码中添加一些注释,使其更易于理解。这是因为我使用递减索引递归调用斐波那契函数。@Zeus只有在
首先
second
始终等于0和1。如果是这样,为什么需要传递它们?例如,如果
first=-1
second=3
,您的代码正确吗?检查新代码。另外,假设first和second>0这两个代码都给了我一个值,就像在F(6)中给F(7)的值一样@宙斯
n
是0索引的(从0开始)还是1索引的(从1开始)?在我的解决方案中,我假设它是0索引的。否则您只需要相应地更改它。