首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >给定base和n都为1或更大时,递归(无循环)计算base的n次方的值,因此powerN (3,2)是9(3的平方)。在java中

给定base和n都为1或更大时,递归(无循环)计算base的n次方的值,因此powerN (3,2)是9(3的平方)。在java中
EN

Stack Overflow用户
提问于 2018-10-24 08:10:31
回答 2查看 1.3K关注 0票数 -2
public static void powerNum(int n,int x,int t) {
    int i = 1;
    if(x>i){
       i++;         
       powerNum(n,x,t);
    }
    else{ 
       System.out.println(n); 
    }
}   

这就是我到目前为止所做的。我认为这是正确的,但我不断得到堆栈溢出错误,并记住。它必须是递归的!请给我完整的答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-24 10:03:16

private static int powerNum(int n, int x) {
    if(x == 0) {
        return 1;
    }
    else {
        return n* powerNum(n, x-1);
    }
}

我想这个街区就是你要找的地方吧?

票数 0
EN

Stack Overflow用户

发布于 2018-10-24 08:12:01

您没有将i传递给下一个函数调用,并且始终将i初始化为1,因此条件if(x>i)始终为真,前提是x不止一个。在if中,您有一个递归调用:

if(x>i){
   i++;         
   powerNum(n,x,t);
}

这会导致无限递归。此外,您永远不要更改或使用nxt的值。

下面是一些可以帮助你的伪代码:

accept three parameters: base, power, and result
if the power less than one
   print the result
else 
   multiply the result by the base
   recursive call passing base, power-1, and result

唯一的问题是result总是需要作为一个传递,这是相当不方便的。您可以创建一个只接受基和幂的重载函数,然后调用原始的powerNum函数,并将1作为结果传递:

public static void powerNum(int base, int power) {
    powerNum(base, power, 1);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52959392

复制
相关文章

相似问题

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