首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fibonacci递归返回无穷大的数字

Fibonacci递归返回无穷大的数字
EN

Stack Overflow用户
提问于 2019-05-28 05:32:35
回答 2查看 53关注 0票数 1

我的代码结果是无穷无尽的数字"2",我不明白为什么。

另外,我的导师告诉我要添加负值的验证--我不知道怎么做。

代码语言:javascript
运行
复制
    public class FibonacciRecursive {

   public static void main(String[] args) {
        int fibonacciNumberOrder = 10;
        do {
            System.out.print(fibonacci(fibonacciNumberOrder) + " ");

        } while (true);
    }

    public static long fibonacci(int fibonacciNumberInOrder) {
        if (fibonacciNumberInOrder == 0) {
            return 0;
        }
        if (fibonacciNumberInOrder <= 2) {
            return 1;
        }
        long fibonacci = fibonacci(-1) + fibonacci(-2);
        return fibonacci;
    }
}

编辑:当我更改该行时

代码语言:javascript
运行
复制
long fibonacci = fibonacci(-1) + fibonacci(-2);

至:

代码语言:javascript
运行
复制
long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

它打印无穷无尽的"55“

我应该如何更改我的代码以使其正常工作?

EN

回答 2

Stack Overflow用户

发布于 2019-05-28 05:35:42

您正在使用常量递归!改变这一点

代码语言:javascript
运行
复制
long fibonacci = fibonacci(-1) + fibonacci(-2);

代码语言:javascript
运行
复制
long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);

而且,在main中的while循环中,您需要修改fibonacciNumberInOrder

代码语言:javascript
运行
复制
int fibonacciNumberOrder = 1;
do {
    System.out.print(fibonacci(fibonacciNumberOrder) + " ");
    fibonacciNumberOrder++;
} while (true);
票数 0
EN

Stack Overflow用户

发布于 2019-05-28 05:36:40

这是因为你用常量计算斐波那契数,而不是传递给1的相对数,这就是递归点。

代码语言:javascript
运行
复制
public static long fibonacci(int fibonacciNumberInOrder) {
    if (fibonacciNumberInOrder == 0) {
        return 0;
    }
    if (fibonacciNumberInOrder <= 2) {
        return 1;
    }
    long fibonacci = fibonacci(fibonacciNumberInOrder - 1) + fibonacci(fibonacciNumberInOrder - 2);
    return fibonacci;
}

更改后的密钥行为:

代码语言:javascript
运行
复制
long fibonacci = fibonacci(fibonacciNumberInOrder-1) + fibonacci(fibonacciNumberInOrder-2);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56332627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档