我只是尝试递归函数中简短提到的练习。我已经编写了这段代码,但是当我运行它(甚至使用调试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;
}
'''
答案 0 :(得分:0)
我是Stack Overflow的新手,所以我的回答也许并不理想,但至少会对您有所帮助。 因此,一件显而易见的事情是,您将scanf的返回值分配给了不正确的变量n(据我所了解的任务),因为scanf返回扫描并分配的成功输入数时,n始终为1 。另外,您需要删除scanf中的新行,以便在return(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;
}