bool is_even(unsigned int n) {
if (n == 0)
return true;
else
return is_odd(n - 1);
}
bool is_odd(unsigned int n) {
if (n == 0)
return false;
else
return is_even(n - 1);
}
来源:https://en.wikipedia.org/wiki/Mutual_recursion
维基百科的 C 语言相互递归函数示例被许多站点引用,除了评估给定数字是否为奇数之外什么也不评估,这是疯狂的。这纯粹是对 CPU 周期的浪费,即使 n 的值只是稍大一些。 我们最好不要想象格蕾塔看到这一点会发怒。
这个问题(我的意思是与数字有关的问题)可以很容易地被每个三年级小学生通过使用所谓的模数来解决,正如其他人已经指出的那样。
此外,通过使用传统 C 语言的特定功能(称为类型转换和截断),无需模数、循环和递归。
int isodd(long long ll)
{
long double ldhalf = (long double) ll/2;
long double llhalf = (long long) (ll/2);
if (ldhalf == llhalf) return 0;
else return 1;
}
由于许多人依赖维基百科,因此需要一个更真实的例子。
查阅维基百科。捐赠一些你更喜欢但同样明确的东西。但请注意,教学示例通常效率很低,并且集中于尽可能清楚地说明概念;您的替代方案必须符合这一点。