当您首次尝试使用以下功能时,它将为您提供正确的答案,该答案将为您提供两个数字的LCM(最小公倍数)。
对于第二个使用新参数的调用,静态变量将不会从1开始,这将给我错误的答案。
在进行递归循环之前,是否有将它设置为1的方法?
int lcm(int a, int b)
{
static int common = 1;
if (common % a == 0 && common % b == 0)
return common;
common++;
lcm(a, b);
return common;
}
最佳答案
没有用于重置功能级静态变量的内置语言机制。尽管您可以构建自己的通信方式,以将static
重置为初始值,但是仍然会滥用该语言,因此使用率较低。
特别是,永远不要在递归函数中使用static
变量,因为非重入递归函数几乎是无用的。此外,您的递归实现非常缓慢,因为它逐一顺序尝试候选lcm
。向其提供两个相当大的素数会导致堆栈溢出。
以不使用lcm
的方式重写您的递归static
。
关于c++ - 如何在C++中重置函数的静态变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47963357/