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

时间:2018-06-21 16:37:31

标签: c recursion static palindrome

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

在测试一个数字时它可以正常工作,但是如果我尝试检查多个数字(我要求用户在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;
    }
}

3 个答案:

答案 0 :(得分:3)

将其构建为

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

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

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

可能是完成您想要做的最简单的方法。知道何时重置静态变量是不可行的,因为没有传递标记...但是如果传递标记,则像其他人指出的那样,仅传递变量本身会更干净。

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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;
    }
}