矢月 发表于 2018-10-22 21:55:00

角谷定理

题目:角谷定理。输入一个自然数,若为偶数,则把它除以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;
}

塔利班 发表于 2018-10-22 21:59:00

你也没换行就是这样啊,5*3+1打印16
16/2打印8,8/2打印4,4/2打印2,2/2打印1
1在你函数里还要打印1

claws0n 发表于 2018-10-22 22:22:23

#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]
查看完整版本: 角谷定理