首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建不同的电源方法

创建不同的电源方法
EN

Stack Overflow用户
提问于 2013-11-21 07:05:06
回答 2查看 155关注 0票数 0

我有一些计算幂的代码,通过调用square,cube和hypercube方法。当前立方体方法调用程序中的square方法,然后超立方体方法调用立方体方法。我想用对power方法的调用替换对cube和hypercube的调用,但我完全卡住了。

以下是运行正常的原始代码。

代码语言:javascript
复制
  public int square( int x ){
    int i = ( x*x );
    return i;
}
public int cube( int x ){
    int i = (x * square(x) );
    return i;
}
public int hypercube( int x ){
    int i = (x * cube(x) );
    return i;
}

public int power(int x, int n){  
    int k;
    if (n==2){
        k = square(x);
    }
    else if (n==3){
        k = cube(x);
    }
    else if (n==4){
        k = hypercube(x);
    }
    else if (n==1){
        k = x;
    }
    else {
        k = 1;
        for (int i = 0; i < n; i++) {
            k *= x;
        }
    }
    return k;
}

现在就像我说的,我想用对幂方法的调用来替换立方体和超立方体方法中的调用,然后在幂方法中仍然有对square,cube等的调用。因此,我希望完全删除对这些方法的调用,因为我不再需要它们。这真的让我很烦。这是我到目前为止所拥有的,但它给了我StackOverFlowError。

代码语言:javascript
复制
 public int square( int x, int n ){
    int i = power( x, n );
    return i;
}
public int cube( int x, int n ){
    int i = power(x , n );
    return i;
}
public int hypercube( int x, int n ){
    int i = power(x , n );
    return i;
}

public int power(int x, int n){  
    int k;
    if (n==2){
        k = square(x, n);
    }
    else if (n==3){
        k = cube(x, n);
    }
    else if (n==4){
        k = hypercube(x, n);
    }
    else if (n==1){
        k = x;
    }
    else {
        k = 1;
        for (int j = 0; j < n; j++) {
            k *= x;
        }
    }
    return k;
}
EN

回答 2

Stack Overflow用户

发布于 2013-11-21 07:20:59

首先,正如你已经认识到的那样,这是一种非常糟糕的做事方式。因此,任何其他阅读本文的人,除了通常呼吁避免重复发明轮子(除非是出于教育目的)之外,不要以这种方式实现您的求幂方法!

也就是说,你得到堆栈溢出的原因(如此恰当)是因为你有一个循环定义。要了解这一点,最简单的方法是尝试手动跟踪power的工作原理。假设我想运行power(3, 2)。会发生什么?power(3, 2)将其识别为n == 2的一个实例,因此转到square方法。但是,square方法依赖于power方法来完成任务,然后无限重复。因此,你会得到堆栈上堆积的函数调用,直到你耗尽空间。

顺便说一句,如果您正在考虑实现用于个人启迪的整数幂运算,您可能希望查看重复平方。它可以让你的代码更快(对数乘法运算,而不是线性乘法运算)。

票数 0
EN

Stack Overflow用户

发布于 2013-11-21 08:22:38

在我看来,这是一个无限的循环。如果为n=2,则power调用sqaure,而sqaure又调用power,n也不变。

当你处理无穷大时,你通常会得到StackOverFlowError。

幂(x,n)必须独立于立方体或平方,如果你想摆脱它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20109020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档