我正在编写一个程序,使用递归检查数字是否是回文。 我使用一个静态变量来保持数字的值倒写,最后比较是否等于原始数字。
在测试一个数字时它可以正常工作,但是如果我尝试检查多个数字(我要求用户在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;
}
}
答案 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;
}
}