关于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
程序就是以这样的顺序执行