当您首次尝试使用以下功能时,它将为您提供正确的答案,该答案将为您提供两个数字的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/

10-14 08:01