将公式放入for循环中

问题描述 投票:0回答:3

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

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,但由于某种原因,我得到了不同的输出,因此我假设我将循环设置为错误。

java loops recursion factorial
3个回答
0
投票

∑(2 * i-1),总和应该在循环中进行

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


0
投票

您需要进行2次更改。

1]循环将从i=1i=n+1,而您只需要循环直到i=n

因此for循环退出条件应该为i<n+1i<=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);
}

0
投票

您犯了两个错误,不是在每次迭代中都进行更新,而是将其累加而不是加到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。

© www.soinside.com 2019 - 2024. All rights reserved.