请补充fun()函数,该函数的功能是求m的阶乘。不要改动主函数main()与他函数中的任何内容,仅在fun()函数的横线上填写所需的若干表达式或语句。
注意:部分源程序如下。
#include<stdio.h>
long fun(int m)
if (1)
return(m*fun (2) );
return (3) ;
main()
printf("8!=%ld\n",fun(8));
参考答案:m>l (2)m-1 (3)1
解析: ①该程序的功能是实现阶乘的计算。其中,阶乘的计算公式定义为“当m=1时,m!=1;当m>1时,m!=m*(m-1)*(m-2)*…*1。公式分为参数1和是1和大于1的两种情况。例如,1的阶乘1!=1;5的阶乘5!=5*4*3*2*1。
②从已给部分源程序的main()主函数开始入于,主函数执行printf输出语句,该语句调用自定义的fun()函数,并将数值8传递给fun()函数的m参数。其中fun()函数就是对阶乘算法的实现。
③进入fun()函数,根据前面的定义,它对阶乘算法的实现可以分为两种情况。一是当m>1时,应该用什么程序来实现阶乘的计算;二是当m=1时,函数直接返回1即可。
第一空:if (1) 是要根据m的取值来判断使用何种阶乘的计算公式。这里根据第二句递归调用语句,可知该语句是用来计算当m>1时的阶乘。因此,第一空if语句里面的条件应该是满足m>1。所以,第一空处应该填“m>1”。
第二空:return(m*fun (2) )很显然是采用递归函数来实现阶乘的计算,所以第二空处应该填“m-1”。
第三空:return (3) 该语句是要实现当m=1时的阶乘计算,所以第三空处应填“1”。
[考点] 递归函数。