递归powerof-function,看看你是否可以解决它

时间:2010-04-23 23:25:06

标签: recursion

首先,这不是功课 - 只是我的好奇心,因为我出于某种原因无法理解它并解决它。我总是想出这些愚蠢的事情,当我无法解决它时,它会让我感到厌烦。

代码示例在C#中,但解决方案不必是任何特定的编程语言。

long powerofnum(short num, long powerof)
    {
        return powerofnum2(num, powerof, powerof);
    }

    long powerofnum2(short num, long powerof, long holder)
    {
        if (num == 1)
            return powerof;
        else
        {
            return powerof = powerofnum2(num - 1, holder * powerof, holder);
        }
    }

如你所见,我有两种方法。我调用powerofnum(value,powerofvalue),然后使用powerofvalue在第三个参数中调用下一个方法作为占位符,以便通过递归记住原始的powerof值。

我想要完成的只是一种方法。 我知道我可以在第一个方法中使用powerof值声明一个变量来记住它,然后从0迭代到num的值。但由于这是一个理论问题,我希望它以递归方式完成。

我也可以在第一个方法中使用第三个参数调用any来存储值,就像我在第一个调用的第二个方法中那样,但看起来真的很愚蠢。你为什么要写两次看似相同的参数?

简要说明规则:

  • 没有迭代
  • 仅限范围特定的变量
  • 只有一种方法

无论如何,我很欣赏一个干净的解决方案。

祝你好运:)

1 个答案:

答案 0 :(得分:3)

伪代码:

// power(x, y) == x^y, only works for positive integer y
function power(x, y) {
    return y <= 1 ? x : x * power(x, y - 1);
}