我只对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);
}
}
答案 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示例
创建以下递归树答案 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。