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 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分