将公式放入for循环

putting a formula into a for loop

我正在尝试将此公式放入循环中

The function to put inside the loop

我使用 if 语句在输入为零时给出特定结果,但如果输入为 1 或更高,for 循环应该 运行.

我被问到一个关于递归的问题,我应该以 3 种不同的方式执行它,其中一种使用我已经制作的循环和 运行s 但给出了意想不到的结果。

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), sum 应该在循环中结转

将循环中的语句更改为 v = v+(2*i-1) 并将条件更改为 i<=n

您需要进行 2 处更改。

1) 循环将从 i=1i=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 块中,您总是可以安全地 return 1.