有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有人能解释一下这个递归问题吗?问题解决了吗?

Given base and n that are both 1 or more, compute recursively (no loops) the value of base to the n power, so powerN(3, 2) is 9 (3 squared).

答案是

public int powerN(int base, int n) {

if(n == 1)
        return base;
    return base * powerN(base, n - 1);
}

我很困惑,因为当我看这个的时候,这不是说用powerN()的返回数乘以基数吗

powerN(3,3);

= 3

= 3*powerN(base, n-1) = 6

= 3*powerN(base, n-1) = 9

哪个乘以9*6*3

我不明白为什么我们必须用函数乘以基数

该方法是否应该只返回答案,因为基类永远不会更改,并且一旦n==1基类执行时,该方法是否应该返回答案


共 (2) 个答案

  1. # 1 楼答案

    让我们像你一样计算powerN(3,3)

    1. powerN(3,3) = 3 * powerN(3,2)
    2. 3 * powerN(3,2) = 3 * 3 * powerN(3,1)
    3. 3 * 3 * powerN(3,1) = 3 * 3 * 3 = 27

    所以你的计算方法是错误的

  2. # 2 楼答案

    假设我们有powerN(2,3)

    powerN(2,3):
    
    call#1> return 2*powerN(2,3-1)
    call#2> return 2*powerN(2,2-1)
    call#3> (n==1)return 2*1
    

    所以

    call#3 returns 2 to call#2 [call#2 is now returning 2*2=4]
    call#2 returns 4 to call#1 [call#1 is now returning 2*4=8]
    

    就这样