C++ 跟踪递归函数(Collatz)中的计数

C++ 跟踪递归函数(Collatz)中的计数,c++,recursion,collatz,C++,Recursion,Collatz,在执行collatz函数时,我很难弄清楚如何跟踪递归函数自身调用的次数。我有函数定义: template<class myType> myType recursionSet<myType>::collatz(myType n) { if(n == 1) return 1; else { if(n%2 == 1) return collatz(3*n+1); else

在执行collatz函数时,我很难弄清楚如何跟踪递归函数自身调用的次数。我有函数定义:

template<class myType>
myType recursionSet<myType>::collatz(myType n)
{
    if(n == 1)
        return 1;
    else {
        if(n%2 == 1)
            return collatz(3*n+1);
        else
            return collatz(n/2);
    }
}
模板
myType递归集::collatz(myType n)
{
如果(n==1)
返回1;
否则{
如果(n%2==1)
回圈(3*n+1);
其他的
返回领口(n/2);
}
}
如何跟踪此函数自身调用的次数?我似乎一辈子都想不出一个解决办法。谢谢


参考collatz函数:

您正在尝试计算collatz链的长度,不是吗。您是否意识到当前您总是返回
1
?您应该修改代码以返回计数。这意味着将当前迭代添加到递归调用:

template<class myType>
myType recursionSet<myType>::collatz(myType n)
{
    if(n == 1)
        return 1;
    else {
        if(n%2 == 1)
            return 1 + collatz(3*n+1);
        else
            return 1 + collatz(n/2);
    }
}
模板
myType递归集::collatz(myType n)
{
如果(n==1)
返回1;
否则{
如果(n%2==1)
返回1+collatz(3*n+1);
其他的
返回1+collatz(n/2);
}
}

将计数作为参数传入,或将其设为静态。@Serdalis递归函数中的静态变量不起作用吗?变量永远不会被重置,并且无法在任何点将其设置为零,因为每次调用它自己时,它都会重复将自身设置为零。@Need4Sleep您从未提到过关于任何多个初始条目的任何内容,在这种情况下,静态将正常工作。否则请使用by reference count参数。是的,我认为静态将有问题。将其作为参数传递是您想要的。是的,静态将是有问题的,因为您也必须有一个案例来重置它,只是提供选项:)正是我所寻找的,当您的答案出现时,我正在考虑这个问题。现在说得通了,谢谢!没问题。。。由于我预测您现在将尝试计算起始值小于1000000的最长Collatz链,因此我建议您通过提供
向量
引用来记忆调用