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