【发布时间】:2021-06-06 12:25:27
【问题描述】:
我正在尝试制作一个简单的递归代码来计算斐波那契级数的总和,但我不知道如何使计数器正常工作,这是我的代码:
public static long fibonacciRecursiveHits(int n,long sum)
{
if (n>1)
{
sum++;
sum = fibonacciRecursiveHits(n-1,sum) + fibonacciRecursiveHits(n-2,sum);
}
return sum;
}
例子:
Input: 4
Correct Output: 4 //The number of sums
My Output: 12
【问题讨论】:
-
你有没有通过代码,或者更好的是,用铅笔和纸“玩电脑”来追踪执行路径?想想
sum在进入时发生了什么,以及当它递归传入、递增,然后再次相加时。 -
@DaveNewton 是的,这就是我通常做的,但我不知道如何计算每个递归调用的总和,因为如果我使用 sum,它会产生:1(第一个总和)+2(第一个加递归的总和),如果我在 sum 参数中引入 0 它没问题,但总是返回 0,因为最后一个递归调用总是读取 n 是
-
如果运行时很重要,不要递归地实现这个函数——函数调用的数量在
n中呈指数增长。仅仅因为您想计算这些和的递归性质,您不必递归地实现它。例如,您可以实现从0到n的循环,并将中间结果存储在一个数组中以重复使用它并避免(指数)冗余工作。或者更好的是,考虑一下并在n中明确制定序列。
标签: java recursion math fibonacci