永发信息网

C语言阶乘问题

答案:3  悬赏:50  手机版
解决时间 2021-12-03 14:49
C语言阶乘问题
最佳答案
1. 每个fact()都必须执行到return num;
2. 4 3 2 1 2 3 4前4321是由

long fact(int n)
{
printf("%d\n",n);
long num=0;
这第一个printf()输出的。
而后234是由
else
{
num=fact(n-1)*n;//这句就进去了,但!是!,函数执行完成,还是要回来的。
printf("%d\n",n);//上一句执行完了,就执行这一句,然后再执行下一句。每个函数里都是这样。
}追问后面的printf什么时候进来的,是n=2还是n=1时?这里有点晕啊说具体点追答n=2的时候
在每一个fact()的时候都会执行这一句。
但是你这里
else if(n==1||n==0)
{

num=1;
}
n==1的时候另外处理了。
所以n==1的时候就没有输出1了。
如果你这里也printf()一下。
结果就会是4 3 2 1 1 2 3 4 了
全部回答
你的else 里面num=fact(n-1)*n的后面有一个printf语句,该条语句是在上一条语句中调用fact(n-1)完成并退出到这里后执行,所以就多了2,3,4

因为你返回的是num,递归是用堆栈的,需要return fact(n-1)*n;  不能最后返回num,返回的num是第一次计算的值

long fact(int n)
{
    printf("%d ",n);
    long num=0;
    if(n<0)
    {
        printf("您输入的有误");
        return 0;
    }
    else if(n==1||n==0)
    {
        return 1;
    }
    else
    {
        return fact(n-1)*n;
        printf("%d ",n);
    }
}追问稍微再解释一下~~可以吗追答哪里不懂?
举个例子吧,计算fac(3) = 3*fac(2)=3*2*fac(1)
3入栈
2入栈
1入栈
之后计算fac(1)=1,此时1出栈与1相乘等于1,之后2出栈与1相乘等于2,之后3出栈与2相乘等于6,所以最后结果为6
递归是有个入栈与出栈的过程的。追问就是renturn num放在最后怎么就会出现 2 3 4呢。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
10月1日k516次车从哪个车站出发
满蜜鸡油红水滴蜜蜡最新市场价格多少钱一克
为什么有的人关车门总是很大力
为什么班上男生老说我很纯真,还经常用插,做
指陈时弊 是什么意思?
在家庭电路中,用测电笔辨别输电线时,能使氖
羟丙甲纤维素滴眼液可以随便用吗?
有力量的话概念
谁知道蜂鸟配送骑手一天能赚多少钱,工资怎么
玲玲家四月份交电费200元一五月份多六分之一
mysql两表联合查询
求黑·执·事全集,百度云
电动三轮车可以载人吗
147乘15除21减21能简便算吗?
心当生稀有 什么意思
推荐资讯
平安的资料递送员到底是干嘛的?是拉保险的吗
单选题有人认为“收入分配的公平就是要消除收
男生纹理烫多久烫一次?
一套100平三室一厅的房子家具大概要多少钱
弗朗哥手表怎么样
五句话描述男朋友
行李箱内部用来固定行李的带子可以自己配置吗
上海市宝山区呼兰西路123号是哪个街道
请问一下广电总局电视标识是啥?
2015年河北已故退休老教师的抚恤金发放标准.
cstk 电源 说明 不知有什么用途
想一想,算一算
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?