m0_74180644 2022-10-30 00:37 采纳率: 25%
浏览 24
已结题

c语言,求各位帮我解答一下

题目:用函数实现角谷定理:输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求输入5经过多少次可得到自然数1
方法:递归函数
我遇到的问题:按下面这个代码运行,输入1,得到的是0次;输入其他数字,直接不打印。
如果我把 “printf("共进行了%d次", i);”放到主函数的“ m(n,i); return 0;”之间的话,不管输入什么都是0次。
好像根本就只调用了一次这个递归函数的样子。
能跟我解释一下为什么会这样吗?我又该如何改?谢谢各位了!!

#include <stdio.h>
int m(int ,int);

int main()
{
    int n;
    int i=0;
    scanf_s("%d", &n);
    m(n,i);
    return 0;
}
int m(int n,int i)
{
    if (n == 1)
        printf("共进行了%d次", i);
        return 1;
    if (n % 2 == 0)
    {
        n = n / 2;
        i = i + 1;
        m(n,i);
    }
    else
    {
        n = n * 3 + 1;
        i = i + 1;
        m(n,i);
    }
}


  • 写回答

2条回答 默认 最新

  • 心寒丶 全栈领域优质创作者 2022-10-30 08:25
    关注

    if后边括号加上,不加括号后边 return 1;就直接运行了

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月7日
  • 已采纳回答 10月30日
  • 创建了问题 10月30日

悬赏问题

  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM