C语言中的Collatz递归

C语言中的Collatz递归,c,collatz,C,Collatz,我承认这是一个共同的主题,但我无法在我自己的代码中找到我想要的,如果我找不到错误的地方,那么所有其他答案都会变得毫无意义 我必须为用户查询的任何值实现Collatz递归,然后返回该值达到1所需的迭代步数 int main(void) { int m,n,count; printf("Enter a value for 'n': "); scanf("%d",&n); m = n; count = 0; if (m != 1) {

我承认这是一个共同的主题,但我无法在我自己的代码中找到我想要的,如果我找不到错误的地方,那么所有其他答案都会变得毫无意义

我必须为用户查询的任何值实现Collatz递归,然后返回该值达到1所需的迭代步数

int main(void)
{
    int m,n,count;
    printf("Enter a value for 'n': ");
    scanf("%d",&n);

    m = n;
    count = 0;
    if (m != 1) {
        if (m%2 == 0); {
            m = m/2;
            count++;
            }

        if (m%2 == 1) {
            m = m*3+1;
            count++;
            }
        }

    if (m==1)
        return count;

    printf("The number %d takes %d iterations to reach '1'",n,count);

    return 0;
}

任何建议都很好。我相信如果m!=1每次都会返回一个新的m值,每次返回时,它都会增加计数。

如果m%2==1,则可能应该使用else;您可以执行一个或另一个操作,但不能同时执行这两个操作,因为如果m的值在开始时为2,那么if m%2==0代码会将m设置为1,而if m%2==1代码会将其设置为4,并且……您会遇到问题。你需要一个循环,而m!=1而不是if-too。否则,只进行一次迭代。最后,这里没有递归。注意if条件后面的分号。您可能不希望出现这种情况。应始终检查返回值,而不是为调用scanf和family设置的变量,以确保操作成功。在这种情况下,还应检查“n”的值,以确保其大于1。变量“count”将始终为0、1或2。这可能不是你想要的。我怀疑代码需要有循环,可能是:while1!=m发布的代码无法检查输入是否为0或负,并且无法处理此类输入错误SBTW:发布的代码中没有递归