【问题标题】:putting a formula into a for loop将公式放入 for 循环
【发布时间】:2020-03-01 10:31:29
【问题描述】:

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

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


    【解决方案1】:

    您需要进行 2 处更改。

    1)循环将从i=1 运行到i=n+1,而您只需要它运行到i=n

    所以 for 循环退出条件应该是 i&lt;n+1i&lt;=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);
    }
    

    【讨论】:

      【解决方案2】:

      您犯了两个错误,而不是添加到 v 您在每次迭代时都进行更新,因此总值不会被求和。而且由于您使用的是&lt;=,因此您不需要迭代到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。

      【讨论】:

        【解决方案3】:

        Σ(2*i-1), sum 应该在循环中进行

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

        【讨论】:

          猜你喜欢
          • 2013-07-02
          • 2023-01-31
          • 1970-01-01
          • 2016-11-25
          • 2016-07-05
          • 1970-01-01
          • 2020-03-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多