Collat​​z链递归函数C.

时间:2014-09-09 01:03:43

标签: c recursion collatz

我正在尝试创建一些代码,当给出起始编号时,会尝试查找相应的collat​​z链的长度。

我希望以递归的方式做到这一点,这是我到目前为止所做的:

#include stdio.h

int collatz(int number, int count)
{
    if(number == 1)
    {
        return count;
    }
    if(number%2==0)
    {
    number = number/2;
    collatz(number, count+1);
    }
    else
    {
    number = number*3+1;
    collatz(number,count+1);
    }
    return 0;
}

int main(void)
{
    int stored=0;
    int temp;
    for(int i = 1;i<10;i++)
    {
        temp = collatz(i,1);
        if(temp>stored)
        {
            stored = temp;
        }
    }
    printf("%i\n",stored);
}

问题当然是函数最终到达其端点,但随后以链的长度返回,这将成为新的数字..

如何构建此程序,以便当计数到达其终点时,我可以将此值作为第一次调用的输出?

1 个答案:

答案 0 :(得分:2)

您需要返回递归调用的结果。现在你忽略了递归调用的值并返回0.每个递归调用应如下所示:

return collatz(number, count+1);