c++中不使用全局变量的递归函数中的加法次数
Number of additions in a recursive function without using global variables in c++
我必须实现一个计数器来计算这个递归函数中的加法次数,但我不允许使用全局变量。你知道怎么做吗?例如,如果函数必须在空闲时间调用自身,那么我的计数器必须在函数末尾 return 之前设置为 3。
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;
}
您可以将函数签名更改为:
long lindh(unsigned int n, int &count)
在初始调用和每个递归调用中,将您希望计数结束的变量传递给它。在适当的地方增加count
。
您可以定义一个带两个参数的重载 lindh
函数。重载函数有两个参数,而从 main
调用的版本是 "base" 函数,它只是委托给重载函数。
此外,由于您需要 return 一个 lin
值和 count
,您可以 return 一个 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;
}
我必须实现一个计数器来计算这个递归函数中的加法次数,但我不允许使用全局变量。你知道怎么做吗?例如,如果函数必须在空闲时间调用自身,那么我的计数器必须在函数末尾 return 之前设置为 3。
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;
}
您可以将函数签名更改为:
long lindh(unsigned int n, int &count)
在初始调用和每个递归调用中,将您希望计数结束的变量传递给它。在适当的地方增加count
。
您可以定义一个带两个参数的重载 lindh
函数。重载函数有两个参数,而从 main
调用的版本是 "base" 函数,它只是委托给重载函数。
此外,由于您需要 return 一个 lin
值和 count
,您可以 return 一个 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;
}