c++ - C++中的递归函数

标签 c++ function recursion

如果我有这个递归函数:

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() 才能计算出 mystery(20)?

我尝试添加一些 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/

相关文章:

c - 使用函数构建结构体

java - 如何在没有 int 参数的情况下递归删除连续的重复项?

python - 为什么我得到 "maximum recursion depth exceeded"

c++ - AVL树的中序遍历,将值保存在数组中

c++ - 使用 C++ 将 void 写入文件

c++ - 使用 dgemm/dgemv 的矩阵 vector 积

PHP 如何在条形图/图形中打印字符串中的字符数?

javascript - 调用以字符串编码的 javascript 函数

JavaScript 递归延迟方法调用

java - JNI 不满意链接错误 : A dynamic link library (DLL) initialization routine failed