使用递归函数输出斐波那契模式中具有交替负数的第 N 个数字

我正在尝试使用 Java 解决递归函数练习问题,但它让我完全难住了:


Given the small integer n (0 <= n <= 40) you need to find the n-th number of the alternating Fibonacci sequence.


The sequence starts with 0, 1, -1, 2, -3, 5, -8, 13, -21, ...


So, fib(0) = 0, fib(1) = 1 => fib(2) = -1.

我可以实现查找第 N 个斐波那契数的函数,但是具体的问题要求却让我失败了。每当我尝试实现某种负数时,它最终都会搞砸算术而不是改变输出的最终数字。我的思绪不断回到创建某种仅在最顶层框架上触发的条件,但我不认为这是可以实现的。


有谁知道如何解决这个问题?这是我的基本函数,没有实现任何类型的负数要求:


    public static long fib(long n){

        if (n == 0){

            return 0;

        } else if (n == 1){

            return 1;

        } else if (n == 2){

            return 1;

        } else {

            return fib(n-2)+fib(n-1);

        }

    }


四季花海
浏览 99回答 4
4回答

胡子哥哥

您可以简单地使用另一个函数来处理负面要求:public static int AlternatingFiboonacci(int n){&nbsp; &nbsp; if(n > 0 && n % 2 == 0) return -fib(n);&nbsp; &nbsp; &nbsp;//if n is even and greater than 0&nbsp; &nbsp; else return fib(n);}如果您需要一个单一的工作功能,这应该可以完成工作public static int fib(int n){&nbsp; &nbsp; if(n < 2) return n;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; if(n % 2 == 0) return -1 * (fib(n - 1) - fib(n - 2));&nbsp; &nbsp; else return (-1 * fib(n - 1)) + fib(n - 2);}这个函数的作用是:当n为偶数时,返回fib(n - 1)(为奇数,因此为正)-&nbsp;fib(n - 2)(为偶数,因此为负)。减法将是一个正值,乘以 -1。当n为奇数时,返回 -1 *&nbsp;fib(n - 1)(为偶数,因此为负)+&nbsp;fib(n - 2)(为奇数,因此为正)。

手掌心

也许现在把这个作为答案还为时不晚:&nbsp; &nbsp; public static long fib(long n){&nbsp; &nbsp; &nbsp; &nbsp; if (n <= 1){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return n;&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return fib(n-2) - fib(n-1);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }

至尊宝的传说

您可以先获取您的号码:public static long fib(long n) {&nbsp; &nbsp; if ((n == 0) || (n == 1))&nbsp; &nbsp; &nbsp; &nbsp; return n;&nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; return fib(n - 1) + fib(n - 2);}然后根据需要添加减号:public long result(long n){&nbsp; &nbsp; long fib = fib(n);&nbsp; &nbsp; if(n>0 && n%2==0) return -fib;&nbsp; &nbsp; else return fib;}

陪伴而非守候

想想这个公式。您想要正常的斐波那契数列,但在偶数位置上它们为负数。假设您的方法将被命名为 altFib。如果您应用Math.abs( altFib(n) ),您将获得第 n 个斐波那契数的实际值,因此很明显,下面的代码也会产生第 n 个斐波那契数:int fib_n = Math.abs( altFib(n-1) ) + Math.abs( altFib( n-2 ) )&nbsp;然后你希望它在偶数位置上为负,所以只需使用简单的 if else :if( n % 2 == 0 )&nbsp; &nbsp; return -fib_nelse&nbsp; &nbsp; return fib_n
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java