【问题标题】:C++ - Recursive counter [closed]C ++ - 递归计数器[关闭]
【发布时间】:2018-05-20 22:57:11
【问题描述】:

我正在尝试创建一个计数器。它计算每个操作,例如乘法,加法,减法,除法。每次我尝试计算计数器时,它都保持为零。

谁能解释我做错了什么?

我的大部分代码丢失了,所以我可以保护它免受其他同学的影响,但是我已经列出了代码所在的部分中有多少操作。

long karatsuba(int num1, int num2, int &counter)
{
 if (num1 < 10 || num2 < 10)
 {
    counter++ // 1 operation
    return num1 * num2;
 }
 /* calculates the size of the number */
 ... 4 operations

 /* split the digit sequences about the middle */
 ... 4 operations

 /* 3 calls made to numbers approximately half the size */
 int z0 = karatsuba(..., ..., counter);
 int z1 = karatsuba(..., ..., counter);
 int z2 = karatsuba(..., ..., counter);


 return ... // 9 operations
}
-------------------------------------------------------------
int main()
{
 int counter = 0;
 cout << karatsuba(123, 456, counter) << " " << counter << endl;

 cout << endl;
 system("Pause");
 return 0;
}

【问题讨论】:

  • 请发布实际的、可编译的代码。上面的代码有语法错误。特别是,counter 声明在哪里?
  • 如果你的大部分代码可以被删除并且仍然产生你描述的问题状态,那么你远远会更好发布 that 作为一个完整的问题源,而不是发布不可编译的猜想。如果您在减少代码的同时发现了实际问题,请不要感到惊讶;它发生的频率比你想象的要多。
  • 不需要我删除的代码,因为它工作正常。我完成了那部分作业。只需实现计数器来计算每个不起作用的操作。

标签: c++ recursion


【解决方案1】:

问题出在这一行:

cout << karatsuba(123, 456, counter) << " " << counter << endl;

试试吧 cout << karatsuba(123, 456, counter); cout << " " << counter << endl;

问题是cout,打印的时候count还是0。

【讨论】:

  • 我会测试这个!谢谢。
  • 成功了。非常感谢。很有道理。
  • +1,好收获!可能值得一提的是,它不能保证“打印时计数仍然为 0。”这实际上是未定义的行为。请参阅this question 了解更多信息。
猜你喜欢
  • 2023-02-04
  • 2013-06-11
  • 2023-04-05
  • 1970-01-01
  • 2011-07-21
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-08-27
相关资源
最近更新 更多