Collatz序列重复最后一个数字1
输出:我得到的输出为: 2 ,1, 1Collatz序列重复最后一个数字1,c,if-statement,while-loop,collatz,C,If Statement,While Loop,Collatz,输出:我得到的输出为: 2 ,1, 1 我不应该重复最后一个数字1。请纠正我犯错误的地方。请做必要的。< /P> < P>在编译C或C++程序时,应该始终启用警告。如果您这样做了,编译器会警告您函数collatz可能会在不返回值的情况下终止。(如果参数为1,会发生什么情况?) 这是未定义的行为,在main函数中使用可能不存在的返回值也是如此 所以,这只是一个偶然的机会,它恰好打印1的主要。但无论打印什么都是错误的,因为您似乎希望输出仅限于在collatz中打印的内容 你可以试着玩电脑,用铅笔和纸
我不应该重复最后一个数字1。请纠正我犯错误的地方。请做必要的。< /P> < P>在编译C或C++程序时,应该始终启用警告。如果您这样做了,编译器会警告您函数
collatz
可能会在不返回值的情况下终止。(如果参数为1,会发生什么情况?)
这是未定义的行为,在main
函数中使用可能不存在的返回值也是如此
所以,这只是一个偶然的机会,它恰好打印1的主要。但无论打印什么都是错误的,因为您似乎希望输出仅限于在collatz
中打印的内容
你可以试着玩电脑,用铅笔和纸来执行你的功能。不会花很长时间的。当然,也可以使用调试器。 1)C和C++是不同的语言。挑一个!2)这既不是C也不是C++。3) 请看。我已经用CSo写了为什么要为不同的语言添加标记?关于其他两个问题,请编辑您的问题。我在Linux环境下工作。我是C编程新手。我不知道在vmware机器的Linux环境中调试。@chandu:是的,我也这么怀疑,这就是为什么我建议使用铅笔和纸的原因。但如果你认真学习如何编程,你最终将不得不学习如何使用调试器。
// Define the recursive function.
int collatz(int p1)
{
// While Loop Starting
while (p1>1)
{
//when the number is even
if(p1%2==0)
{
p1 = p1/2;
printf("%d ", p1);
//using recursion
return collatz(p1);
}
// Case where number is odd.
elseif
{
p1 = 3*p1+1;
//print function
printf("%d ", p1);
//using recursion
return collatz(p1);
}
}
}
// Main body.
int main()
{
// Declare the variable and initialized it.
int p1= 4;
//print function
printf("User Entered value : %d\n", p1);
// Display the number
printf("%d\n", collatz(p1));
//End
return 0;
}