我正在尝试制作这种递归方法。
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) {...}
但我不知道什么是递归等价
答案 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)