Recursion 在c语言中使用递归函数有困难

Recursion 在c语言中使用递归函数有困难,recursion,cs50,Recursion,Cs50,我只是在尝试递归函数的简短介绍中提到的练习。我已经编写了这段代码,但当我运行它(甚至使用debug 50)时,它似乎在第10行的scanf语句之后没有响应 有人知道我去哪里了吗 提前谢谢 亚历克斯 “” #包括 内科拉茨; int Collatz(int n); 内部主(空) { printf(“Int:”); int n=scanf(“%d\n”,&n); 科拉茨(n); //printf(“Collatz:%i\n”,Collatz); } 内科拉茨(北) { 如果(n==1) { prin

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

有人知道我去哪里了吗

提前谢谢

亚历克斯

“”
#包括
内科拉茨;
int Collatz(int n);
内部主(空)
{
printf(“Int:”);
int n=scanf(“%d\n”,&n);
科拉茨(n);
//printf(“Collatz:%i\n”,Collatz);
}
内科拉茨(北)
{
如果(n==1)
{
printf(“Collatz:%i\n”,Collatz);
回圈;
}
否则如果(n%2==0)
{
collatz++;
n=n/2;
科拉茨(n);
}
其他的
{
collatz++;
n=3*n+1;
科拉茨(n);
}
返回1;
}
'''

我是堆栈溢出新手,所以我的答案可能不太理想,但我希望至少能对您有所帮助。 因此,一件显而易见的事情是,您将scanf返回的值分配给变量n,该变量不应该是正确的(就我所理解的任务而言),因为当scanf返回扫描和分配的成功输入数时,n将始终是1。此外,您需要删除scanf中的新行,以便在返回(enter)后,它将读取并将输入分配给变量n。 我还想知道它是否编译为函数Collatz中传递的参数的类型没有定义为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;
}
#包括
内科拉茨;
int Collatz(int n);
内部主(空){
printf(“Int:”);
int n;
scanf(“%d”和“&n”);
科拉茨(n);
//printf(“Collatz:%i\n”,Collatz);
}
内特科拉茨(内特n){
如果(n==1){
printf(“Collatz:%i\n”,Collatz);
回圈;
}否则如果(n%2==0){
collatz++;
n=n/2;
科拉茨(n);
}否则{
collatz++;
n=3*n+1;
科拉茨(n);
}
返回1;
}

是的,已经修好了,谢谢!我理解将int指定给scanf的部分,但是我有点搞不清楚为什么会损坏它。它会编译并卡住。我把它记下来作为一个教训。谢谢你的帮助
#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;
}