c中递归函数中的静态变量

static variable in recursive function in c

我正在编写一个程序,使用递归检查数字是否为回文。 我使用一个静态变量来保持向后写入的数字的值,最后我比较它是否等于原始数字。

它在测试一个数字时工作正常,但如果我尝试检查多个数字(我要求用户在主要的 for 循环中输入几个数字),它会检查第一个数字,但其他人没有。

有没有办法在递归结束后(检查一个数字后)将静态变量重置回 0?

bool IsPalindrome(unsigned int number) {
    static unsigned int Inverse = 0;
    unsigned int OriginalLastDigit, OriginalNumber=number;
    if (number != 0) {
        OriginalLastDigit = number % 10;
        Inverse = Inverse * 10 + OriginalLastDigit;
        IsPalindrome(number / 10);
    }
    if (OriginalNumber == Inverse) {
        return true;
    } else {
        return false;
    }
}

您可以在 number == 0 时重置它,但我不建议使用静态变量,因为它会导致诸如此类的问题,它不是线程安全的,等等。

另一种方法是将其作为参数传递。

bool IsPalindrome(unsigned int number, unsigned int Inverse)
{
    unsigned int OriginalLastDigit, OriginalNumber = number;
    if (number != 0)
    {
        OriginalLastDigit = number % 10;
        Inverse = Inverse * 10 + OriginalLastDigit;
        IsPalindrome(number / 10, Inverse);
    }
    if (OriginalNumber == Inverse)
    {
        return true;
    }
    else
    {
        return false;
    }
}

将其构建为

bool IsPalindrome(unsigned int number) {
  unsigned int Inverse = 0;
  return IsPalindromeHelper(number, &Inverse);
}

您的原始代码略有更改,因此签名为

bool IsPalindromeHelper(unsigned int number, unsigned int* Inverse)

可能是完成您想做的事情的最简单方法。知道何时重置静态变量是不可行的,除了传递一个标志......但是如果你传递一个标志,就像其他人所指出的那样,只传递变量本身会更干净。