流泪的鳄鱼 发表于 2021-2-22 19:17:16

问题描述:递归计算阶乘

本帖最后由 流泪的鳄鱼 于 2021-2-22 19:18 编辑

1 #include<stdio.h>
2 long int fun(int a){
3         int temp = 0;
4         static long int b = 1;
5         temp = a;
6         if(temp <= 1){
7               return b;
8         }
9         else{
10               b = temp *b;
11               fun((temp--));
12         }
13 }
14 int main()
15 {
16         int a = 0;
17         printf("请输入一个整数:\n");
18         scanf("%d",&a);;
19         printf("%d! = %ld\n",a,fun(a));
20         return 0;
21 }
~                           
报错:段错误(核心已转储)                                                                                                                                    

xieglt 发表于 2021-2-22 19:30:48

简单点
#include<stdio.h>

long int fun(int a)
{
        if(a <= 1)
        {
                return 1;
        }
        else
        {
                return a * fun(a-1);
        }
}
int main()
{
        int a = 0;
        printf("请输入一个整数:\n");
        scanf("%d",&a);;
        printf("%d! = %ld\n",a,fun(a));
        return 0;
}

李京 发表于 2021-2-22 19:38:39

你的代码就一点小问题
temp-- 改成 --temp
至于为什么,可以仔细想想这两个的差别

永恒的蓝色梦想 发表于 2021-2-22 19:55:41

fun((temp--));死递归

流泪的鳄鱼 发表于 2021-2-23 10:13:00

李京 发表于 2021-2-22 19:38
你的代码就一点小问题
temp-- 改成 --temp
至于为什么,可以仔细想想这两个的差别

这两个差别我知道,我认为是temp在函数中作为局部变量造成的,但是我觉得这种解释不够透彻

流泪的鳄鱼 发表于 2021-2-23 10:14:03

永恒的蓝色梦想 发表于 2021-2-22 19:55
死递归

我认为是temp在函数中作为局部变量造成的,但是我觉得这种解释不够透彻,是这个造成的死递归吗?

李京 发表于 2021-2-23 10:41:09

本帖最后由 李京 于 2021-2-23 10:46 编辑

流泪的鳄鱼 发表于 2021-2-23 10:14
我认为是temp在函数中作为局部变量造成的,但是我觉得这种解释不够透彻,是这个造成的死递归吗?

不是temp是局部变量的问题

fun(temp--)
temp-- 自减要下一条语句才生效
可以换成temp-1 或者 --temp
都可以

你传入的值一直是你刚输入的值,你觉得是不是一直在递归

你可以自己试着一条一条语句的执行

第一次递归temp=a

然后你传入下一次递归的值是temp(temp 就是 a的值) 并不是 temp-1
因为temp--要下一条语句才执行自减

永恒的蓝色梦想 发表于 2021-2-23 17:38:14

流泪的鳄鱼 发表于 2021-2-23 10:14
我认为是temp在函数中作为局部变量造成的,但是我觉得这种解释不够透彻,是这个造成的死递归吗?

每次递归传的都是一样的参数,就成死递归了

流泪的鳄鱼 发表于 2021-2-24 18:58:45

李京 发表于 2021-2-23 10:41
不是temp是局部变量的问题

fun(temp--)


懂了,非常感谢{:5_109:}

流泪的鳄鱼 发表于 2021-2-24 18:59:16

永恒的蓝色梦想 发表于 2021-2-23 17:38
每次递归传的都是一样的参数,就成死递归了

懂了,非常感谢{:5_109:}
页: [1]
查看完整版本: 问题描述:递归计算阶乘