问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于C语言的一个例题

发布网友 发布时间:2023-01-04 21:04

我来回答

4个回答

热心网友 时间:2023-09-20 10:54

首先大家拿着小板凳坐坐好,记得笔记本和笔,我们来看看这个程序的运行过程,很多问题就知道了答案了~
看到这段程序之后呢,我们可以忽略"#include <stdio.h>",
首先我们要看的是main函数,也就是
main()
{
printf("10!=%ld\n", fun(10));
}
这个是主函数,任何C语言程序都是先执行main函数滴。
前半段"10!=%ld\n"滴意思是:printf=输出," "英文双引号中的文字直接输出,但是%ld是fun函数返回的数值,\n表示输出回车就是空一行;
好了,前半段的指令电脑是记住了,之后它看见了main函数中调用了另外一个被命名为fun的函数,于是乎电脑带着10这个fun函数的负值就暂时跳到了fun()函数里面,这就是主函数后半句的意思。
电脑跳到了这:
long fun(int n)
{
if (n>1)
return (n*fun(n-1));
return 1;
}
长整型可以不用理,这个叫fun的函数首先用( int n )这个定义了一个整型变量,这个变量是谁捏?就是我们电脑从main函数中带来的10,记好哦在这个程序中n刚开始的负值是main函数里面给的,而且只是刚开始的值。
if (n>1)
return (n*fun(n-1));
return 1;
看见两个英文分号没?表示这是两个句子,解释一下就是:满足if条件的就执行第一个return,不满足就执行第二个return,这个是重点!
我们的小n一开始等于10,那么我们用10判断一下,10>1是成立了的,满足if的条件了那么我们做第一个return:(10×fun(9))
好了这里的fun(9)又被电脑看见了,于是乎电脑又带着9呼呼呼滴跑回到fun函数滴开头了,不用担心留下来的10×我们还会回来的。
在fun(9)里面先有个if 啊,9>1啊,执行第一个return啊,然后就是fun(9×fun(8)),看见fun(8)了吧,然后就依此类推啊。直到n不再大于1的时候,就是n=1的时候,这个暂时放一放啊。
我们可以从10一直到2(知道为什么n是个变量了吧,因为丫会变...)暂时得出这么个式子:
10×(9×(8×(7×(6×(5×(4×(2×fun(1)))))))) 根据()的优先级,我们是从最里面的()开始“回头”滴:
fun(1): if (1>1) 不成立鸟,第一个return 直接跳过,看第二个return:"return 1;"意思就是返回1这个数值,也就是说fun(1)=1,带进那个狂长无比的式子:
10×(9×(8×(7×(6×(5×(4×(2×1)))))))这个会算吧?我不算了啊就当这个式子算出来等于a吧。
当我们做到最后一个10×(?)的时候得到a,这时的情况是这样的:
if (10>1) return (a);
本着谁调用就返回哪的原则,我们又回到了main函数中,即:
printf("10!=a\n")
然后我们能看见的输出就是:
10!=a
(空行)
(a是数字啊!,我是麻烦才找个符号代替的啊!!因为怕这个a很长,地址容纳不下,才定义成long长整型滴!!!)至此整个求10的阶层的程序就结束鸟。
**********************************************************************************************************************
问题一:已答;
问题二:已答;
问题三:已答;
问题四:同上;
问题五:童鞋,我答完鸟~呼~

热心网友 时间:2023-09-20 10:54

long fun(int n)
//这是一个递归函数,fun(10)要返回10*fun(9),但是fun(9)还不知道,等调用fun(9)返回后才返回
//而fun(9)要返回9*fun(8),但是fun(8)也不知道, 一直到fun(1)的时候返回1
//fun(1)返回后,fun(2)函数返回值=2*fun(1)=2……
{
if (n>1)
return (n*fun(n-1));//n>1时返回n*fun(n-1)
return 1;//n=1时返回1
}
程序求10的阶乘
程序流程:
fun(10)
-->fun(9)
-->fun(8)
-->fun(7)
-->fun(6)
-->fun(5)
-->fun(4)
-->fun(3)
-->fun(2)
-->fun(1)
-->return 1
-->fun(2)return 2*fun(1)=2
-->fun(3)return 3*fun(2)=6
-->fun(4)return 4*fun(3)=24
-->fun(5)return 5*fun(4)=120
-->fun(6)return 6*fun(5)=720
-->fun(7)return 7*fun(6)=5040
-->fun(8)return 8*fun(7)=40320
-->fun(9)return 9*fun(8)=362880
-->fun(10)return 10*fun(9)=3628800
-->printf

热心网友 时间:2023-09-20 10:55

首先定义了一个fun函数;
这个FUN函数运用了递归调用
//在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用
对于一个函数 递归必须要有一个退出的条件 不然就是死循环
所以该fun函数加入了IF判断语句
当n>1时 运行语句 “return (n*fun(n-1));”
当n<=1时 会返回 1 来结束;

相当于数学表达式:
fun(1)=1;
fun(n)=n*fun(n-1);
所以
fun(10)=10*fun(9)
=10*9*fun(8)
... ...
=10!

该FUN函数实现的就是上述过程,希望能帮到你
程序流程上面几个大大已经说了

热心网友 时间:2023-09-20 10:55

这不过就是一个简单的函数递归调用,每调用一次就把最初的n值减一,直到一为止,这样就完成了阶乘,当n大于1时就不断递归,直到最后为1,那么第一个return返回的是下一个被调用函数的return值,反正这就是一个循环,你仔细看看就能明白的,实在不行你百度我追问还是不懂。。怎么递归?详细具体过程是怎样的呢?第一次见到这种格式的。

追答递归函数反正就是自己调用自己,然后每次调用的时候参数会发生变化直到变化到终止时的条件,我觉得我的表达能力不是太好,
(程序流程来自二楼)
程序流程:
fun(10)
-->fun(9)
-->fun(8)
-->fun(7)
-->fun(6)
-->fun(5)
-->fun(4)
-->fun(3)
-->fun(2)
-->fun(1)
-->return 1
-->fun(2)return 2*fun(1)=2
-->fun(3)return 3*fun(2)=6
-->fun(4)return 4*fun(3)=24
-->fun(5)return 5*fun(4)=120
-->fun(6)return 6*fun(5)=720
-->fun(7)return 7*fun(6)=5040
-->fun(8)return 8*fun(7)=40320
-->fun(9)return 9*fun(8)=362880
-->fun(10)return 10*fun(9)=3628800
-->printf
程序就是以这样的顺序执行

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
“笑指旧山归路长”的出处是哪里 PCB为什么要拼板,PCB拼板打样有哪些好处? 绘制紫外吸收光谱时,我发现最大吸收波长是333nm,此时吸光度为4.01 对吸光度测量值有何影响? 陆垚知马俐的歌词是什么? 玫瑰花水中的养殖方法 陈年柚子茶如何做 陈年柚子茶的制作方法 在答题卡上改题号是指那一道题扣分还是整个卷子都没? ...考试时我写到了卷子上,会怎么样?会不会按抄袭 高考时在卷子上不小心画了道怎么办? C语言程序题求解题过程。 梦见在超市买花生糖 梦见跟情人超市卖酸奶 梦见跟情人超市推销酸奶 动宾词组有哪些? 珠穆朗玛峰是世界上最高的一座山英语的三种说法 世界最高的山 的英文 中国有许多著名的山川其中珠穆朗玛峰是世界上最高的山峰用英语怎么说? &#39;世界最高的山峰&#39;用英语表示 有许多著名的山峰其中珠穆朗玛峰是世界上最高的山峰的英语 用英语说世界上最高的山大约8844、43米 曲线和中轴线的关系 徽采商城入围后可以退出吗 徽采商城怎么入驻 马自达CX30油位怎么看 马自达油表怎么看还有多少油? 现在什么地方有疫情不能去 国内哪些地方有疫情不能去 广州芳村地铁站是几号线? 梦见搬家收拾东西 詹姆斯二儿子几年出生的 雪莲句子23句 恶意网站检测开启联网后需要收费吗 自己没有交易,单币 信用卡却出现预授权美元消费是什么情况 中行信用卡USD消费是什么含义? 预授权美元已解冻是什么意思 静脉曲张症状的症状表现 静脉曲张的症状有哪些,静脉曲张的症状表现 我不明白啥是中行信用卡USD消费? 烟台万象汇淘气堡在几楼 烟台莱山万象汇营业时间 膊去掉偏旁还剩几画 CPE宽带可以打电话、发短信吗? 无线宽带卡可打电话吗? 我家里准备新装一条宽带,可以直接联络电信客服那儿帮助处理吗? 住的地方手机信号不好,装宽带可以打电话吗? 梦见外人给钱全是一角钱的小钱 我梦见别人给我一袋钱全部是一角一角两角钱 通过查到对方聊天记录 从契约精灵开始有女主吗