为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2023-10-13 14:47:08
我正在尝试使用 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);        }    }
查看完整描述

4 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

您可以简单地使用另一个函数来处理负面要求:


public static int AlternatingFiboonacci(int n){

    if(n > 0 && n % 2 == 0) return -fib(n);     //if n is even and greater than 0

    else return fib(n);

}

如果您需要一个单一的工作功能,这应该可以完成工作


public static int fib(int n){

    if(n < 2) return n;     

    if(n % 2 == 0) return -1 * (fib(n - 1) - fib(n - 2));

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

}

这个函数的作用是:

  • n为偶数时,返回fib(n - 1)(为奇数,因此为正)- fib(n - 2)(为偶数,因此为负)。减法将是一个正值,乘以 -1。

  • n为奇数时,返回 -1 * fib(n - 1)(为偶数,因此为负)+ fib(n - 2)(为奇数,因此为正)。


查看完整回答
反对 回复 2023-10-13
?
手掌心

TA贡献1942条经验 获得超3个赞

也许现在把这个作为答案还为时不晚:


    public static long fib(long n){

        if (n <= 1){

            return n;

        } else {

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

        }

    }



查看完整回答
反对 回复 2023-10-13
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

您可以先获取您的号码:


public static long fib(long n) {

    if ((n == 0) || (n == 1))

        return n;

    else

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

}

然后根据需要添加减号:


public long result(long n){

    long fib = fib(n);

    if(n>0 && n%2==0) return -fib;

    else return fib;

}


查看完整回答
反对 回复 2023-10-13
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

想想这个公式。


您想要正常的斐波那契数列,但在偶数位置上它们为负数。假设您的方法将被命名为 altFib。如果您应用Math.abs( altFib(n) ),您将获得第 n 个斐波那契数的实际值,因此很明显,下面的代码也会产生第 n 个斐波那契数:


int fib_n = Math.abs( altFib(n-1) ) + Math.abs( altFib( n-2 ) ) 

然后你希望它在偶数位置上为负,所以只需使用简单的 if else :


if( n % 2 == 0 )

    return -fib_n

else

    return fib_n


查看完整回答
反对 回复 2023-10-13
  • 4 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信