我正在尝试将此公式放入循环中
The function to put inside the loop
如果输入为零,则使用if语句为我提供特定的结果,但是如果输入为1或更高,则应运行for循环。
我被问到关于递归的问题,应该以3种不同的方式执行它,其中之一是使用已经创建并运行但会产生意外结果的循环。
public class Assignment5Recursion {
public static int puzzleLoop(int n) {
int v=0;
if(n>=1) {
for(int i=1; i<=n+1; i++) {
v = (2*i-1);
}
return ((2*n+1)+2*v);
}
else {
return 1;
}}}
如果n为1,则结果应为5,如果n为2,则结果应为13,如果n为3,则结果应为25,如果n为7,则结果应为113,但由于某种原因,我得到了不同的输出,因此我假设我将循环设置为错误。
∑(2 * i-1),总和应该在循环中进行
将循环中的语句更改为v = v +(2 * i-1),并将条件更改为i <= n
您需要进行2次更改。
1]循环将从i=1
到i=n+1
,而您只需要循环直到i=n
。
因此for循环退出条件应该为i<n+1
或i<=n
2)变量v将在每次循环运行时被替换,因为每次都会为其分配新的值。
因此,根据您的代码,v的值将始终为v=2*(n+1)-1
。
您需要设置为v += (2*i-1)
,以便将v的新值添加到旧值中以获得sigma(sum)。
如下替换您的for循环将解决您的问题。
for(int i=1; i<n+1; i++) {
v += (2*i-1);
}
或
for(int i=1; i<=n; i++) {
v = v+(2*i-1);
}
您犯了两个错误,不是在每次迭代中都进行更新,而是将其累加而不是加到v上,因此总值不会累加。并且由于您使用的是<=
,所以不需要迭代到n+1
。因此,这是为您修改的puzzleLoop
方法
public static int puzzleLoop(int n) {
int v = 0;
if (n >= 1) {
for (int i = 1; i <= n; i++) {
v += (2 * i - 1);
}
return ((2 * n + 1) + 2 * v);
}
return 1;
}
您也不需要else部分语句,因为如果不在if
块中,则始终可以安全地返回1。