维基百科的C语言相互递归的例子

问题描述 投票:0回答:1
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;
}

由于许多人依赖维基百科,因此需要一个更真实的例子。

recursion wikipedia cpu-cycles
1个回答
0
投票

查阅维基百科。捐赠一些你更喜欢但同样明确的东西。但请注意,教学示例通常效率很低,并且集中于尽可能清楚地说明概念;您的替代方案必须符合这一点。

© www.soinside.com 2019 - 2024. All rights reserved.