如何制作递归方法?

时间:2018-05-28 18:03:48

标签: java recursion

我正在尝试制作这种递归方法。

public int addWithFactors(int[] a, int n) {
    int sum = 0;
    for (int i = 0; i < n; i++) {
        sum = sum + (i + 1) * a[i];
    }
    return sum;
}

我试图创建一个if语句而不是for循环:

if (n == 0) {...}

但我不知道什么是递归等价

2 个答案:

答案 0 :(得分:1)

您可以像这样定义您的功能:

public int addWithFactors(int[] a, int n) {
     if (n == 1)
            return a[n - 1];
     return (n) * a[n - 1] + addWithFactors(a, n - 1);
}

你可以像下面这样打电话:

    addWithFactors(new int[] {1, 1, 2} ,3)

它返回9.

答案 1 :(得分:-1)

private int addWithFactorsInternal(int[] a, int n, int i) {
   if (i == n) {
      return 0; //base case
   }
   return addWithFactors(a, n, i + 1) + (i + 1) * a[i];
}

addWithFactors(a, n, i + 1)使递归调用递增i。基本情况是i到达n时返回0。

对于其他人,您将(i + 1) * a[i]添加到递归调用并返回。

如果您的顶级方法是您提到的签名,则可以将上述方法称为

public int addWithFactors(int[] a, int n) {
     return addWithFactorsInternal(a, n, 0);
}

注意:我并不认为n等于a.length

示例:

a = {1,4 5} n = 3(从上到下阅读LHS,从下到上阅读RHS)

[返回24]

addWithFactorsInternal(a, 3, 0) - 23 + (0 + 1) * 1 = 24
addWithFactorsInternal(a, 3, 1) - 15 + (1 + 1) * 4 = 23
addWithFactorsInternal(a, 3, 2) - 0 + (2 + 1) * 5 = 15
addWithFactorsInternal(a, 3, 3) - returns 0 (base case)