Java递归斐波那契值

Java递归斐波那契值,java,recursion,fibonacci,Java,Recursion,Fibonacci,问题: 递归计算第7个斐波那契值需要调用多少次 这是一个给我的问题,答案是41。然后我去找一位教授,因为我不懂,但我得到了另一个答案。我想是25岁吧?(不要引用我的话)然后我去找另一位教授。。。他告诉我,给你这个问题的人应该给你示例代码,因为可以有多种方法来编写这个递归函数,这将导致不同数量的调用 如果这是真的,你们能找到不同的递归函数,从而得到序列的第7个值所需的调用量不同吗?一种方法: static long fibonacciR(int i) { if (i <= 1)

问题: 递归计算第7个斐波那契值需要调用多少次

这是一个给我的问题,答案是41。然后我去找一位教授,因为我不懂,但我得到了另一个答案。我想是25岁吧?(不要引用我的话)然后我去找另一位教授。。。他告诉我,给你这个问题的人应该给你示例代码,因为可以有多种方法来编写这个递归函数,这将导致不同数量的调用

如果这是真的,你们能找到不同的递归函数,从而得到序列的第7个值所需的调用量不同吗?一种方法:

static long fibonacciR(int i)
{
    if (i <= 1)
        return i;
    return fibonacciR(i - 1) + fibonacciR(i - 2);
}
static long fibonacciR(inti)
{

如果(我查找尾部递归:。这会导致n次调用,其中n=第n个Fibonacci值递归无论如何都是错误的答案。你应该使用动态规划来解决这个问题。一种是niave方法,另一种是a。这取决于你如何编写它。如果你使用memonization,你可以减少调用次数,但如果你只使用
返回n==0?0:n==1?1:fib(n-1)+fib(n-2);
呼叫数确实是
41
。这是正确问题的答案,也是所述问题的答案,答案为“零”。
static final int    f[] = {0,1,1,2,3,5,8,13,21,34,55,89,144};
static long fibonacciR2(int i)
{
    if (i < f.length)
        return f[i];
    return fibonacciR2(i-1)+fibonacciR2(i-2);
}
static long fibonacciR3(int i)
{
    if (i == 0)
        return 0;
    if (i <= 2)
        return 1;
    return fibonacciR(i - 1) + fibonacciR(i - 2);
}