我了解尾递归,但是我被分配编写代码以查看第N个斐波纳契数。
首先,此代码确实有效。 这不是最好的方法,但它是一种方法-但是我开始担心它不是尾递归。代码在这里:
static int fib_tail_helper(int n, int result) {
if (n == 0) {
return result;
}
else if (result == 0) {
return fib_tail_helper(n - 1, result + 1);
}
else {
return fib_tail_helper(n - 1, result + fib_tail_helper(n - 1, 0));
}
}
int fib_tail(int n) {
/*
// REQUIRES: n >= 0
// EFFECTS: computes the Nth Fibonacci number
// fib(0) = 0
// fib(1) = 1
// fib(n) = fib(n-1) + fib(n-2) for (n>1).
// MUST be tail recursive
*/
return fib_tail_helper(n, 0);
}
我最担心的是“返回fib_tail_helper(n-1,结果+ fib_tail_helper(n-1),0 ”)。
我觉得这将使用另一个堆栈,因此是非尾递归的。。。有人可以提供一些输入吗?
谢谢!!
最佳答案
不,它不是尾递归的。
编译器需要首先评估fib_tail_helper
参数,这意味着它将在继续调用最后一个fib_tail_helper
作为返回值之前创建n-1个调用堆栈。
关于c++ - 两次调用自己的返回-尾递归还是不?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25943541/