当前位置: 首页 > 知识库问答 >
问题:

如何在Java中使用递归生成负斐波那契序列?

岳宣
2023-03-14

我必须写一个程序,返回斐波那契数,但不只是正数。我不知道我写代码的方式有什么不对,但我的代码使用正数,而不是负数。

public static int negFib(int n) {
    if(n==0 || n==1) {
        return n;
    }
    if(n==-1) {
        return 1;
    }
    if(n<0 && n%2==0) {
        //return negFib(n+2) - negFib(n+1);
        return (-1<<(n+1))*(negFib(n-1) + negFib(n-2); // Fibonacci negative
        //F(n)=F(n+2)−F(n+1)
        //F(−1)=F(1)−F(0)=1−0=1 , F(−2)=F(0)−F(1)=0−1=−1
    } 
    return negFib(n-1) + negFib(n-2); //Fibonacci positive      
}

共有2个答案

郑茂勋
2023-03-14

试试这个:

long f[] = new long[(int) (n+2)];  
long i;

f[0]=0;
f[1]=1;

for (i=2; i <= n; i++) { 
   f[(int) i] = f[(int) (i-1)] + f[(int) (i-2)];
}
解晟
2023-03-14

如果你想用F−n=(−1) n1Fn公式:

public static int negFib(int n) {
    if(n==0 || n==1) {
        return n;
    }
    if(n==-1) {
        return 1;
    }
    if(n<0) {
        int sign = n % 2 == 0 ? -1 : 1;
        return sign * negFib(-n);
    } else {
        return negFib(n-1) + negFib(n-2);
    }     
}

您的尝试有几个问题:

  • 对于负n(奇数或偶数),您应该对-n-1-n-2进行递归调用。
  • 您对符号的计算-(-1

 类似资料:
  • 问题内容: 请解释以下简单代码: 我对最后一行感到困惑,特别是因为例如,如果n = 5,则将调用fibonacci(4)+ fibonacci(3),依此类推,但我不理解该算法如何以此来计算索引5的值方法。请详细解释! 问题答案: 在斐波那契数列中,每一项都是前两项的总和。因此,你编写了一个递归算法。 所以, 现在你已经知道了。因此,你可以随后计算其他值。 现在, 从斐波那契数列中我们可以看到斐波

  • 我试图想出一个程序,从用户那里获取任何数字,并生成斐波那契码的第n个数字。当我完成工作时,它会显示下一个,而不是我需要的。例如,我正在寻找第11个#和它的生产233而不是144。这是我的代码:

  • 问题内容: 我在大学为我的Programming II类编写的程序需要一些帮助。这个问题要求人们使用递归来计算斐波那契数列。必须将计算出的斐波那契数存储在一个数组中,以停止不必要的重复计算并减少计算时间。 我设法使程序在没有数组和存储的情况下运行,现在我试图实现该功能,但遇到了麻烦。我不确定如何组织它。我已经浏览了Google并浏览了一些书,但没有太多帮助我解决如何实施解决方案的方法。 上面是不正

  • Python3 实例 以下代码使用递归的方式来生成斐波那契数列: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com def recur_fibo(n): """递归函数 输出斐波那契数列""" if n <= 1: return n else: return(recur_fibo(n-1) + recur_fibo(n

  • 问题内容: 关门了 。这个问题需要更加集中。它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 改善这个问题 如何在SQL中生成斐波那契数列! 我需要生成斐波那契数列0 1 1 2 3 5 8 13 21 … N 我使用C代码轻松做到了这一点,我需要使用Sql做到这一点! 问题答案: 试试这个 ! 0 1 1 2 3 5 8 13 21 34 5

  • 我有两种不同的方法,一种是用迭代法计算第n个元素的斐波那契序列,另一种是用递归法。 程序示例如下所示: 我试图找出哪种方法更快。我得出的结论是,对于较小数量的数字,递归速度更快,但随着第n个元素的值增加,递归速度变慢,迭代速度变快。以下是三个不同n的三个不同结果: 示例#1(n=10) 示例#2(n=20) 示例#3(n=30) 我真正想知道的是,为什么迭代突然变得更快,递归变得更慢。如果我错过了