【发布时间】:2018-06-21 16:37:30
【问题描述】:
我正在编写一个程序,该程序使用递归检查数字是否为回文。 我使用了一个静态变量来保持倒写的数字的值,最后我比较了它是否等于原始数字。
测试一个数字时它工作正常,但如果我尝试检查多个数字(我要求用户在主循环的 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;
}
}
【问题讨论】:
-
答案很简单——在递归中使用静态变量是“作弊”。而是将其作为附加参数传递,因此您的函数变得“纯”。
-
顺便说一句,你不要使用递归调用的返回值。
-
我会建议一种不同的方法 - 编写一个递归函数“ReverseNumber”,然后一个包装器比较
n == ReverseNumber(n)。这种逻辑会更清晰。
标签: c recursion static palindrome