相互递归的实际例子?

时间:2013-07-15 06:28:38

标签: algorithm data-structures recursion mutual-recursion

我正在阅读有关相互递归的内容。在几乎所有材料中,确定整数是偶数还是奇数都是问题?

int is_even(unsigned int n)
{
    if (n==0) return 1;
    else return(is_odd(n-1));
}

int is_odd(unsigned int n)
{
    return (!iseven(n));
}

显然,使用模数运算符可以更容易地解决上述问题。

其他例子是找出一个人是女性还是男性的问题。这也可以在不使用递归的情况下以更简单的方式解决。

那么相互递归是理论上还是在任何地方我可以用它来实际使我的解决方案比使用任何其他技术更简单?

请举这样的例子来帮助我吗?

3 个答案:

答案 0 :(得分:3)

相互递归并不常见,但它有时很有用。使用“递归下降”方法解析文本是一个实用的设置,您可以在其中找到它。

http://en.m.wikipedia.org/wiki/Recursive_descent_parser

答案 1 :(得分:1)

我通常拥有的一个用例是当我编写一个游戏程序时。在这种情况下,您将经常使用递归来遍历游戏树来计算最佳移动。

虽然通常可以非常简单地完成,但没有相互递归,当每个玩家的逻辑足够复杂以保证其自身的功能时,以这种方式编码可能会有所帮助。并且有足够的独特玩家可以尝试让一个巨大的功能给一个巨大的混乱。

答案 2 :(得分:0)

实际上是后期发布,如果枢轴策略是Quickselect算法,那么一个实例就是Median-of-medians算法,因为中位数中位数枢轴方法调用quickselect来计算每5个元素组的n / 5个中位数。