我必须实现一个计数器来计算此递归函数中的相加次数,但是我不允许使用全局变量。你知道怎么做吗?例如,如果函数必须调用自己的空闲时间,则必须在返回之前在函数末尾将我的计数器加三。
long lindh(unsigned int n) {
long lin = 0;
if (n == 1 || n == 2) {
lin = 1;
} else {
lin = 1 * lindh(n - 1) + 3 * lindh(n - 2);
}
return lin;
}
int main() {
long b = 0;
b = lindh(24);
cout << "lindhauer " << b << endl;
return 0;
}
答案 0 :(得分:3)
您可以将功能签名更改为:
long lindh(unsigned int n, int &count)
在初始调用和每个递归调用中都将要计数的变量传递给它。在适当的位置增加count
。
答案 1 :(得分:2)
您可以定义一个带有两个参数的重载lindh
函数。重载函数带有两个参数,而从main
调用的版本是“基本”函数,仅委托给重载函数。
此外,由于您需要同时返回lin
值和count
,因此可以返回std::pair<long, int>
来表示lin
值和计数。这样就无需使用全局变量
这里是一个例子:
#include <utility>
#include <iostream>
long lindh(unsigned int n, int &count)
{
long lin = 0;
if (n == 1 || n == 2) {
lin = 1;
} else {
++count;
lin = 1 * lindh(n - 1, count) + 3 * lindh(n - 2, count);
}
return lin;
}
std::pair<long,int> lindh(unsigned int n)
{
int count = 0;
return {lindh(n, count), count};
}
int main()
{
auto b = lindh(24);
std::cout << "lindhauer = " << b.first << "\ncount = " << b.second << std::endl;
}