c中的递归函数有问题

Having trouble with recursive function in c

我只是在尝试递归函数短文中提到的练习。我已经编写了这段代码,但是当我 运行 它(甚至使用调试 50)时,它似乎在第 10 行的 scanf 语句之后变得无响应。

有人知道我去过哪里吗?

提前致谢

亚历克斯

'''
#include <stdio.h>

int collatz;
int Collatz (int n);

int main (void)
{

    printf("Int:");
    int n = scanf("%d \n", &n);
    Collatz(n);
    //printf("Collatz: %i\n", collatz);
}


int Collatz(n)
{
    if (n == 1)
    {
         printf("Collatz: %i\n", collatz);
        return collatz;
    }

    else if (n % 2 == 0)
    {
        collatz++;
        n = n/2;
        Collatz(n);

    }

    else
    {
        collatz++;
        n = 3 * n+1;
        Collatz(n);
    }


    return 1;
}

'''

我是 Stack Overflow 的新手,所以我的回答可能不太理想,但我希望至少能帮到你。 因此,一件显而易见的事情是,您将 scanf 的 returned 值分配给变量 n,这不应该是正确的(就我对任务的理解而言),因为 n 将始终为 1,因为 scanf returns 扫描和分配的成功输入数。此外,您需要删除 scanf 中的新行,以便在 return(enter) 之后它将读取输入并将其分配给变量 n。 我还想知道它是否编译为函数 Collat​​z 传递的参数类型未定义为 int。我稍微更改了代码,我认为它可以正常工作。

#include <stdio.h>

int collatz;

int Collatz(int n);

int main(void) {

    printf("Int:");
    int n;
    scanf("%d", &n);
    Collatz(n);
    //printf("Collatz: %i\n", collatz);
}


int Collatz(int n) {
    if (n == 1) {
        printf("Collatz: %i\n", collatz);
        return collatz;
    } else if (n % 2 == 0) {
        collatz++;
        n = n / 2;
        Collatz(n);

    } else {
        collatz++;
        n = 3 * n + 1;
        Collatz(n);
    }


    return 1;
}