1

我在尝试弄清楚如何跟踪我的递归函数在执行 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/collat​​z-recursion/

4

1 回答 1

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);
    }
}
于 2013-04-09T02:52:53.823 回答