对于循环,每次计算相同的值

for loop calculates the same value each time

本文关键字:计算 于循环 循环      更新时间:2023-10-16

我正在尝试实现一个会返回我的kth术语的复发关系。但是,当我更改K值时,我会收到相同的输出。这是我的代码:

int recurrence(int a, int b, int k, int u0, int u1) {
  int u = u0;
  int uu = u1;
  for (int i = 0; i < k; i++)
    uu = a*u1 + b*u0;
  return uu;
}
int recurrence2(int a1, int b1, int k1, int u4, int u5) {
  int u = u4;
  int uu = u5;
  for (int i = 0; i < k1; i++)
    uu = a1*u5 + b1*u4;

  return uu;
}
int main() {
  int h;
  h = recurrence(7, 1, 5, 3, 5 );
  int g;
  g = recurrence2(17, 11, 2, 1, 2);
  cout << "The result is:  " << h;
  cout << "The result is : " << g;
}

您评估循环中表达式中相同的值,因此,无论执行多少次,结果都不会更改。看起来这是您需要的:

int recurrence(int a, int b, int k, int u0, int u1)
{
    for (int i = 0; i < k; i++) {
        auto tmp = a*u1 + b*u0;
        u0 = u1;
        u1 = tmp;
    }
    return u1;
}

或更简单:

int recurrence(int a, int b, int k, int u0, int u1)
{
    for (int i = 0; i < k; i++) {
        u0 = a*u1 + b*u0;
        std::swap( u1, u0 );
    }
    return u1;
}

第二个功能需要以相同的方式更改。

ps您问您如何保持变量状态以进行进一步的调用,最佳方法是拥有维护它的class

class Recurrence {
     int m_a;
     int m_b;
     int m_u0;
     int m_u1;
 public:
     Recurrence( int a, int b, int u0, int u1 ) :
         m_a( a ),
         m_b( b ),
         m_u0( u0 ),
         m_u1( u1 )
     {
     }
     int value() const { return m_u1; }
     void interate()
     {
          m_u0 = m_a * m_u1 + m_b * m_u0;
          std::swap( m_u0, m_u1 );
     }
     void interateN( int n )
     {
          for( int i = 0; i < n; ++i ) iterate();
     }
};
int main()
{
     Recurence recurence( 7, 1, 3, 5 );
     recurence.iterateN( 5 );
     int h = recurence.value();
     recurence.iterateN( 5 ); // continue
     ...
}

实际上,您可能希望让该类更通用 - 例如使用不同数量的参数,不同类型,将它们存储在数组中等。此代码只是为了向您展示这个想法。