不需要睡觉o 2024-05-14 20:06 采纳率: 94.7%
浏览 1
已结题

C语言递归这个代码为什么只能输出answer1呀?


#include<stdio.h>
long int fact(int num);
long int rfact(int num);
int main(){
    int num;
    printf("please enter a num from 1-12:\n");
    scanf("%d",&num);
    printf("The answer1 is %ld",fact(num));
    printf("The answer2 is %ld",rfact(num));
    return 0;
}
long int fact(int num){
int i;
long int j=1;
for(i=1;i<num;i++)
    j=j*(i+1);
return j;
}
long int rfact(int num){
long int k=1;
int l=1;
if(l<num)
    k=k*rfact(l+1);
return k;
}

这个代码为什么只能输出answer1呀?

  • 写回答

2条回答 默认 最新

  • 笑面虎 2024-05-14 20:06
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您想要解决的问题是理解为什么在您提供的C语言代码中,只能输出answer1,而answer2没有正确输出。

    【问题出现原因】:问题出现在递归函数rfact的定义和调用上。具体来说,有以下几点错误:

    1. rfact函数中,您使用了变量l来控制递归,但是在递归调用时,l的值并没有按预期增加,导致递归无法正确终止。
    2. 递归函数中,您应该传入num而不是l+1,因为您需要基于num来计算阶乘,而不是基于l
    3. rfact函数的递归调用中,您没有使用递归终止条件,即当num为1时,应该直接返回1。

    【问题解决方案】:为了解决这个问题,您需要修正rfact函数,确保它能够正确地递归调用自身,并且有一个合适的终止条件。

    【提供代码】:下面是修改后的代码:

    #include<stdio.h>
    long int fact(int num);
    long int rfact(int num);
    int main(){
        int num;
        printf("please enter a num from 1-12:\n");
        scanf("%d",&num);
        printf("The answer1 is %ld\n",fact(num));
        printf("The answer2 is %ld\n",rfact(num)); // 增加换行符以便于阅读
        return 0;
    }
    long int fact(int num){
        int i;
        long int j=1;
        for(i=1;i<=num;i++) // 修改为 <= num,以包含num本身
            j=j*i;
        return j;
    }
    long int rfact(int num){
        if(num == 1) // 添加递归终止条件
            return 1;
        else
            return num * rfact(num - 1); // 使用num来控制递归,而不是额外的变量
    }
    

    【代码运行方式】:您需要一个C语言的编译器,如GCC。将上述代码保存为.c文件,然后在命令行中使用编译器编译并运行。例如,如果您的文件名为factorial.c,在命令行中输入以下命令:

    gcc factorial.c -o factorial
    ./factorial
    

    【代码预期运行结果】:

    please enter a num from 1-12:
    5
    The answer1 is 120
    The answer2 is 120
    

    这里的输入是5,answer1answer2都应该是120,因为5的阶乘是120。

    【推荐相关链接】:

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

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 修改了问题 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表