在我的递归函数中跟踪计数(Collat​​z)

时间:2013-04-09 02:44:04

标签: c++ recursion collatz

我无法弄清楚如何跟踪我的递归函数在执行collat​​z函数时调用自身的次数。我有函数定义:

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);
    }
}

如何跟踪此函数调用自身的次数?我似乎无法为我的生活提出解决方案。谢谢!

对collat​​z函数的引用:http://www.xamuel.com/collatz-recursion/

1 个答案:

答案 0 :(得分:2)

您正在尝试计算Collat​​z链的长度,不是您。你是否意识到目前你总是回归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);
    }
}