角谷定理
题目:角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过有限次后,总会得到自然数1。给定任意自然数,输出这一过程。如对于5,该过程为16 8 4 2 1,需要递归来实现。疑惑:已经设置过断点调试,不知为什么会打印图中的结果
代码:
#include<iostream>
int th(int num)
{
if (num == 1)
{
printf("1");
}
else if (num % 2 == 0)
{
num = num / 2;
printf("%d", num);
return th(num);
}
else
{
num = num * 3 + 1;
printf("%d", num);
return th(num);
}
}
int main()
{
int n;
printf("请输入一个数字:");
scanf_s("%d", &n);
th(n);
system("pause");
return 0;
} 你也没换行就是这样啊,5*3+1打印16
16/2打印8,8/2打印4,4/2打印2,2/2打印1
1在你函数里还要打印1 #include<iostream>
void th(int num) //void
{
if (num == 1)
{
return; // return
}
else if (num % 2 == 0)
{
num = num / 2;
printf("%d\n", num); // \n
return th(num);
}
else
{
num = num * 3 + 1;
printf("%d\n", num); // \n
return th(num);
}
}
int main()
{
int n;
printf("请输入一个数字:");
scanf_s("%d", &n);
th(n);
system("pause");
return 0;
}
页:
[1]