在C中使用递归函数遇到麻烦

时间:2019-11-30 00:20:50

标签: recursion cs50

我只是尝试递归函数中简短提到的练习。我已经编写了这段代码,但是当我运行它(甚至使用调试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;
}

'''

1 个答案:

答案 0 :(得分:0)

我是Stack Overflow的新手,所以我的回答也许并不理想,但至少会对您有所帮助。 因此,一件显而易见的事情是,您将scanf的返回值分配给了不正确的变量n(据我所了解的任务),因为scanf返回扫描并分配的成功输入数时,n始终为1 。另外,您需要删除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;
}