在C ++中不使用全局变量的递归函数中的加法数

时间:2018-12-05 23:08:37

标签: c++ pointers recursion counter function-pointers

我必须实现一个计数器来计算此递归函数中的相加次数,但是我不允许使用全局变量。你知道怎么做吗?例如,如果函数必须调用自己的空闲时间,则必须在返回之前在函数末尾将我的计数器加三。

long lindh(unsigned int n) {

  long lin = 0;
  if (n == 1 || n == 2) {
    lin = 1;
  } else {
    lin = 1 * lindh(n - 1) + 3 * lindh(n - 2);
  }

  return lin;
}

int main() {
  long b = 0;
  b = lindh(24);

  cout << "lindhauer " << b << endl;

  return 0;
}

2 个答案:

答案 0 :(得分:3)

您可以将功能签名更改为:

long lindh(unsigned int n, int &count) 

在初始调用和每个递归调用中都将要计数的变量传递给它。在适当的位置增加count

答案 1 :(得分:2)

您可以定义一个带有两个参数的重载lindh函数。重载函数带有两个参数,而从main调用的版本是“基本”函数,仅委托给重载函数。

此外,由于您需要同时返回lin值和count,因此可以返回std::pair<long, int>来表示lin值和计数。这样就无需使用全局变量

这里是一个例子:

#include <utility>
#include <iostream>


long lindh(unsigned int n, int &count) 
{
  long lin = 0;
  if (n == 1 || n == 2) {
    lin = 1;
  } else {
    ++count;
    lin = 1 * lindh(n - 1, count) + 3 * lindh(n - 2, count);
  }
  return lin;
}

std::pair<long,int> lindh(unsigned int n) 
{  
   int count = 0;
   return {lindh(n, count), count};
} 

int main() 
{
   auto b = lindh(24);
   std::cout << "lindhauer = " << b.first << "\ncount = " << b.second << std::endl;
}

Live Example