假设我们正在编写一个简单的递归函数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;
}
我认为根本的呼叫通过返回到不同的来电者,即本例中的主要方法,从所有的孩子不同。我想知道是否有可能使用此属性来编写条件和方式。
更新:请注意,这是一个人为设计的例子,仅用于介绍该想法。这应该从标签中清楚。我不寻找标准的解决方案。谢谢。
正如许多答案中指出的那样,创建一个启动递归的包装函数是很常见的做法。自定义之前/之后处理(如IO)可以去那里。 – 2010-04-22 16:18:45