gpt4 book ai didi

java - 这是尾递归吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:02:14 26 4
gpt4 key购买 nike

我试图找到尾递归的例子,但我真的看不出正则递归和尾递归之间的区别。如果这不是尾递归,有人能告诉我为什么不是吗?

public static long fib(long index) {

// assume index >= 0

if (index == 0) // Base case

return 0;

else

if (index == 1) // Base case

return 1;

else

// Reduction and recursive calls

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

} // end of method fib(long index)

最佳答案

不,问题中的方法不使用尾递归。尾递归很容易识别:递归步​​骤是方法中发生的最后事情。

在您的代码中,两个递归调用结束后,还有一个操作要做 - 加法。所以该方法是递归,但不是尾递归

为了比较,这是 fib() 方法的尾递归实现 - 注意我们需要如何传递额外参数来保存递归状态,更重要的是,请注意递归调用返回后没有任何操作要做。

public static long fib(int n, long a, long b) {
return n == 0 ? b : fib(n-1, a+b, a);
}

像这样使用它:

fib(10, 1, 0) // calculates the fibonacci of n=10
=> 55

以前的实现在 n=92 时也能正常工作,对于更大的数字,您必须使用 BigInteger 而不是 long,最好切换到迭代算法.

关于java - 这是尾递归吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18582333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com