使用递归将10增加到负数的幂

时间:2018-03-22 06:20:57

标签: java recursion

我只对n< 0情况,如果n == -3那么我得到,0.001根据需要。 但是我通过反复试验到达了这里。有人可以向我解释'为什么'这是有效的(仅适用于n< 0情况)?

public static double power10(int n) {
  if(n == 0){
    return 1;
  }
  else if (n > 10){
    return 10 * power10(n - 1);
  }
  else {
    return 1.0 / power10(-n);
  }
}

3 个答案:

答案 0 :(得分:2)

以下功能适用于消极和正面力量。

double Power(int n1,int n2) {
    if(n2>=0) {
        if(n2==1) {
            return n1; 
        }
        if(n2==0) {
            return 1;
        }
        else { 
            return n1*Power(n1,n2-1);
        }
    }
    else {
        if(n2==-1) {
            return 1.0/n1; 
        }
        else {
            return 1.0/(n1*Power(n1,(-1)*(n2+1)));
        }
    }

它将为Negative示例

创建以下递归树

This link will redirect you to the recursion tree to better understanding, How this function will work recursively.

答案 1 :(得分:0)

实际上,您的代码不适用于3或-3。两种情况都会发生堆栈溢出。我不知道你怎么得到0.003。

代码中的错误是:

else if (n > 10){

应该是n > 0。代替。

如果我们把这个递归算法变成一个以“10的幂数是......”开头的句子,那么这个递归算法应该非常清楚:

  

10的第n个力量是:

     

如果n为0,1

     

如果n为正,则10 *(n-1)次幂为10

     

如果n为负,则1 / - 次幂为10

您可以看到n的所有值都被覆盖,无论是0,正数还是负数。在错误的代码中,您将0 < n < 10的情况视为“负数”。当你否定那些并递归时,你得到一个真正的负数,它再次进入else并再次被否定。但它们仍不大于10,导致无限递归。

答案 2 :(得分:0)

这里的代码可能会发出堆栈溢出错误。 尝试

else if(n>0) 

现在在上述条件下函数返回第n个值10并返回1000(当n为3时),给你答案0.001。