【发布时间】:2011-02-11 03:47:56
【问题描述】:
假设我们正在编写一个简单的递归函数fib(n),它计算第n 个斐波那契数。现在,我们希望函数打印第 n 个数字。由于重复调用相同的函数,因此必须有一个条件,只允许根调用打印。问题是:如何在不传递任何额外参数或使用全局/静态变量的情况下编写此条件。
所以,我们正在处理这样的事情:
int fib(int n) {
if(n <= 0) return 0;
int fn = 1;
if(n > 2) fn = fib(n-2) + fib(n-1);
if(???) cout << fn << endl;
return fn;
}
int main() {
fib(5);
return 0;
}
我认为根调用不同于所有子调用,因为它返回到不同的调用者,即本例中的 main 方法。我想知道是否可以使用这个属性来写条件以及如何写。
更新:请注意,这是一个人为的示例,仅用于展示这个想法。从标签中应该可以清楚地看到这一点。我不是在寻找标准解决方案。谢谢。
【问题讨论】:
-
正如许多答案中所指出的,通常的做法是创建一个启动递归的包装函数。自定义前/后处理(如 IO)可以去那里。