如果我有此递归函数:

int mystery(int n) {

if ( n == 0 || n == 1 ||  n ==  2) return  n ;
 return (mystery(n-1) + mystery(n-2) + mystery(n-3))  ;
}

我正在寻找谜题(20)。

在计算函数时,如何找出要执行的加法运算次数以及要计算mystery(20)的mystery()调用次数是多少?

我尝试添加一些cout语句,例如:
int mystery(int n) {
    if ( n == 0 || n == 1 ||  n ==  2) {
      cout << n << endl;
      return  n ;
    }
        cout << n << endl;
    return (mystery(n-1) + mystery(n-2) + mystery(n-3))  ;
}

但由于输出了上千个数字,我无法真正理解它。而且我不认为这些cout语句在告诉我执行了多少加法运算以及为了计算mystery(20)进行了多少mystery()调用方面没有起到太大作用?

感谢您提供的所有帮助!

最佳答案

最简单的方法是增加全局(或静态全局)变量。

想得到一些神秘电话的东西:

int nb_of_invok = 0;
int mystery(int n)
{
  nb_of_invok++;
  ...your code here...
}

这得到增加的数量:
int nb_of_invok = 0;
int nb_of_add = 0;
int mystery(int n)
{
  nb_of_invok++;
  if(...)return n;
  nb_of_add++;
  return(...);
}

关于c++ - C++中的递归函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5346897/

10-12 03:03