如何求任意数的N次方

发布于 11-18 19:05 字数 1459 浏览 4 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

美人迟暮2024-11-25 19:05:29

他们问你是否理解递归。考虑 x ^ k 对于某个整数 k,

  • 当 k < 时0, xk = xk+1 / x
  • 当 k = 0 时,xk = 1
  • 当 k > 时0, xk = xk-1 * x

将其转换为代码应该不会太糟糕。我们先用乘法,稍后再把它拿出来。

double recursivePower(double x, int k) {
    if (k < 0) {
        return power(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return power(x, --k) * x;
    }
}

现在,摆脱乘法。由于 n * m = n / (1/m),我们可以将最后的计算重写为 power(x, --k) / (1/x)

double recursivePower(double x, int k) {
    if (k < 0) {
        return recursivePower(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return recursivePower(x, --k) / (1 / x);
    }
}

小数指数可能可以在相同的风格。如果他们希望以同样的方式处理无理指数,我会要求谷歌和相当多的时间来思考这个问题。

They're asking whether you understand recursion. Considering x ^ k for some integer k,

  • when k < 0, xk = xk+1 / x
  • when k = 0, xk = 1
  • when k > 0, xk = xk-1 * x

Turning this into code shouldn't be too bad. Let's use multiplication for now, and take it out later.

double recursivePower(double x, int k) {
    if (k < 0) {
        return power(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return power(x, --k) * x;
    }
}

Now, to get rid of the multiplication. Since n * m = n / (1/m), we can rewrite the last calculation as power(x, --k) / (1/x):

double recursivePower(double x, int k) {
    if (k < 0) {
        return recursivePower(x, ++k) / x;
    } else if (k == 0) {
        return 1;
    } else {
        return recursivePower(x, --k) / (1 / x);
    }
}

Fractional exponents could probably be done in the same style. If they want irrational exponents to be handled in the same way, I'd ask for Google and a fair amount of time to think about the problem.

苏佲洛2024-11-25 19:05:29
static public int power(int value, int pow){
    if(pow == 0) return 1;

    return value * power(value, pow -1);
}
static public int power(int value, int pow){
    if(pow == 0) return 1;

    return value * power(value, pow -1);
}
疾风者2024-11-25 19:05:29

用 JavaScript 完成:

function power(num,pow){
  if (pow == 0) return 1
  num /= 1/(power(num,--pow))
  return num
}

这样称呼它:

power(2,0) // -> 1
power(5,2) // -> 25
power(7,3) // -> 343

我觉得逆除法欺骗了无 * 运算符规则,但是,呃,也许这就是他们正在寻找的。

Done in JavaScript:

function power(num,pow){
  if (pow == 0) return 1
  num /= 1/(power(num,--pow))
  return num
}

Call it like:

power(2,0) // -> 1
power(5,2) // -> 25
power(7,3) // -> 343

I feel like inverse division is cheating the no * operator rule, but eh, maybe that's what they were looking for.

逆光下的微笑2024-11-25 19:05:29

我正在使用java编程语言。面试官限制你在方法中声明一个新变量,最好将它传递给函数。面试官没有限制你使用除法运算符(/),所以你可以使用它。

static double getNthPowerOfNumber(double originalNumber,
        int power) {


    if (power == 0) {
        return 1;
    }
    if (originalNumber == 0) {
        return 0;
    } else {
        originalNumber/=1/getNthPowerOfNumber(originalNumber, --power);

        return originalNumber;
    }



}

如果你想获得数字 3 的 5 次方,则编写 System.out.println("4..double..." + getNthPowerOfNumber(4, 1));

I am using java programming language. The interviewer restricted you to declare a new variable inside the method better you pass it to the function. The interviewer didnt restrict you to use division operator (/) so you can use that.

static double getNthPowerOfNumber(double originalNumber,
        int power) {


    if (power == 0) {
        return 1;
    }
    if (originalNumber == 0) {
        return 0;
    } else {
        originalNumber/=1/getNthPowerOfNumber(originalNumber, --power);

        return originalNumber;
    }



}

if you want to get 5th power of a number 3 then write System.out.println("4..double..." + getNthPowerOfNumber(4, 1));

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文