【问题标题】:Number of time the iterative function is called调用迭代函数的次数
【发布时间】:2018-07-29 18:27:48
【问题描述】:

想从 StackOverflow 寻求一些帮助。我试图打印出斐波那契数的序列以及迭代函数被调用的次数,如果输入是5,则应该是5

但是,我只得到4199371 的计数,这是一个巨大的数字,我从四个小时开始就试图解决这个问题。希望任何能发现错误的人提供提示。

#include <iostream>
using namespace std;

int fibIterative(int);

int main() 
{
    int num, c1;
    cout <<  "Please enter the number of term of fibonacci number to be displayed: ";
    cin  >> num;

    for (int x = 0; x <= num; x++) 
    {
        cout << fibIterative(x);

        if (fibIterative(x) != 0) {
            c1++;
        }
    }
    cout << endl << "Number of time the iterative function is called: " << c1 << endl;
}

int fibIterative(int n) 
{
   int i = 1;
   int j = 0;
   for(int k = 1; k <= n; k++) {
       j = i + j;
       i = j - i;     
   }
   return j;
}

【问题讨论】:

  • 你忘了初始化c1
  • 我鼓励您使用调试器。这是一个重要的问题解决工具,我想你会很快发现错误的。

标签: c++ algorithm fibonacci


【解决方案1】:

首先,初始化变量

c1 = 0;

这样您就不会打印出任何垃圾值。


其次是:

if (fibIterative(x) != 0)
{
     c1++;
}

将使2*count - 1成为您的计数。你不需要那个。

编辑:我注意到您从您的first revision 中删除了额外的c1++;。因此,上述问题不再有效。但是,您再次调用函数fibIterative() 进行检查,这不是一个好主意。您可以简单地在末尾打印 c1-1 以显示计数。


第三,

for (int x = 0; x <= num; x++)

您从0 开始直到等于x,这意味着0,1,2,3,4,5 总共6 次迭代;不是5

如果你打算从x = 1 开始,你需要这个:

for (int x = 1; x <= num; x++)
{            ^
    cout << fibIterative(x) << " ";
    c1++;
}

【讨论】:

  • 感谢您的详细解释。我同意你的观点,迭代函数需要 6 次调用,但是我要解决的问题需要我展示 5,在与讲师澄清后,他坚持认为是 5,叹了口气。这就是为什么我编写了你提到的第二个错误,但我会再次与讲师澄清这部分,因为我个人强烈认为它仍然是 6 次迭代。
  • @Headache:见this斐波那契数列中的前两个数要么是 1 和 1,要么是 0 和 1,具体取决于所选的数列起点。你有一个 0 和 1 的开始,并期待 5 个计数。这就是我怀疑它的原因。现在你有参考/证明。 :)
  • 哇哦,谢谢你的链接!我会用它来和他澄清。非常感谢杰乔!
  • 我是stackoverflow的新手,两个答案我都喜欢,很难选择,绿色的勾很重要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 2023-01-17
  • 1970-01-01
相关资源
最近更新 更多