对于循环,每次计算相同的值
for loop calculates the same value each time
我正在尝试实现一个会返回我的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
...
}
实际上,您可能希望让该类更通用 - 例如使用不同数量的参数,不同类型,将它们存储在数组中等。此代码只是为了向您展示这个想法。
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何编写计算功率的循环
- 在循环条件 i<sqrtN(预先计算)和 i*i<N 中,C++哪个更有效?
- 如果代码包含多个复杂度循环,如何计算复杂度
- C++在不使用pow或循环的情况下计算一个数字的幂
- 计算递归和时的无限循环
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 使用与 openmp C++并行的循环计算矩阵中每一行的最小值
- getline() 在 while 循环条件中如何计算为真或假?
- 为什么 g++ 将计算拉入热循环
- 将函数应用于特征矩阵中的所有元素,而无需循环
- Openmp-嵌套用于循环
- 有类似于循环(圆形)迭代器的东西吗?
- 我是否必须求助于循环,以比较C 中的两个2D阵列
- 计算 for 循环中的复利
- 正在计算while循环中的值
- C++嵌套用于循环
- C++嵌套用于循环-内积-marix乘法
- 为什么for循环中定义的变量只存在于循环内部