【问题标题】:How can I get my iterative algorithm to work?我怎样才能让我的迭代算法工作?
【发布时间】:2021-06-06 03:26:06
【问题描述】:

我正在使用公式 Tn = Tn - 1 + Tn - 3 编写迭代算法,从而得到序列 { 0, 1, 2, 2, 3, 5, 7, 10, 15, 22, 32, 47, 69, 101 } 等。我不知道该怎么做,但这是我尝试过的:

    public long calculate(long n) {

    if (n <= 0) {
        return 0;
    }
    if (n == 1) {
        return 1;
    }
    if (n == 2){
        return 2;
    }
    int firstValue = 1;
    int secondValue = 1;
    int thirdValue;
    



    for (int i = 2; i < n; i++) {
        thirdValue = firstValue;
        firstValue += secondValue;
        secondValue = thirdValue;


    }

    return firstValue;

我想我必须使用某种 forthValue 但不知道如何使用。不胜感激。

【问题讨论】:

  • n = (n - 1) + (n - 3) 不是一个序列。这是一个公式,可以简化为n = 4
  • 但我写的是一个公式(...使用公式 n = (n - 1) + (n - 3))

标签: java algorithm iteration


【解决方案1】:

我制作了一个 JavaScript 对应物,但您当然可以专注于算法。您的forthValue 可以是每次迭代的result (firstValue + thirdValue),并且在一次迭代完成之后,我们交换这些值:-

thirdValue 变为 secondValue

secondValue 变为 firstValue

firstValue 变为 result

以下将起作用:-

//n = n-1 + n-3

function calculate(n) {

    if (n <= 0) {
        return [0];
    }
    if (n == 1) {
        return [0,1];
    }
    if (n == 2){
        return [0,1,2];
    }
    
    let firstValue = 2
    let secondValue = 1
    let thirdValue = 0;
    let result = 0;
    

   const output = [0,1,2];
  
    for (let i = 3; i < n; i++) {
       result = firstValue + thirdValue;
       output.push(result);
       thirdValue = secondValue
       secondValue = firstValue
       firstValue = result;
    }
    return output
    }
    
    let result = calculate(15);
    console.log(result);

如果我们无论如何都要有一个output 数组,另一种方法是使用它来查找下一个值,如下所示:-

//n = n-1 + n-3

function calculate(n) {

    if (n <= 0) {
        return [0];
    }
    if (n == 1) {
        return [0,1];
    }
    if (n == 2){
        return [0,1,2];
    }
    
   
   const output = [0,1,2];
  
    for (let i = 3; i < n; i++) {
       output.push(output[i-3]+output[i-1]);
    }
    return output
    }
    
    let result = calculate(15);
    console.log(result);

【讨论】:

    【解决方案2】:

    对我来说,它看起来像你的公式

    n = 2n-4
    

    但数字不匹配。

    【讨论】:

      【解决方案3】:

      您不能无限期地添加像 forthValue 这样的变量 - 要解决此类问题,您可以使用 recursion

      所以这看起来像这样:

      public class Test {
      
          public long calculate(long n) {
              if (n <= 0) {
                  return 0;
              }
              if (n == 1) {
                  return 1;
              }
              if (n == 2){
                  return 2;
              }
              return calculate(n - 1) + calculate(n - 3);
          }
          public static void main(String[] args) {
      
              Test testClass = new Test();
      
              for (int i=0; i < 10; i++) {
                  System.out.println(testClass.calculate(i));
              }
      
          }
      }
      

      【讨论】:

      • 我知道如何将其编写为递归算法,但对于这个我想将其编写为迭代算法,但谢谢 :)
      【解决方案4】:

      (n - 1) + (n - 3) -> 2n - 4 并且作为迭代算法很容易实现,但是看到你的代码我不确定你的想法是什么。

      public long calculate(long n) {
          long sum = 0;
          for (int i = 0; i < n; i++) {
              sum = 2 * sum - 4;
          }
          return sum;
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-22
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2016-07-26
        相关资源
        最近更新 更多