使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成以下函数:
int factorial(int n):求出n的阶乘,必须使用递归调用。
如果n小于1则返回0。
注意:不能修改函数的其他部分。
1 #include< iostream.h >
2 #include< ctype.h >
3 int factorial(int n)
4 {
5
6 }
7 void main()
8 {
9 cout< < factoria1(1)< < end1;
10 cout< < factoria1(5)< < end1;
11 cout< < factoria1(0)< < end1;
12 return;
13 }
【正确答案】1 if(n< 1)
2 {
3 return 0;
4 }
5 else if(n==1)
6 {
7 return 1;
8 }
9 else
10 {
11 return n*factorial(n-1);
12 }
【答案解析】factorial(int n)求出n的阶乘,要求使用递归调用。递归调用是指在调用一个函数的过程中直接或间接地调用该函数本身,n的阶乘计算公式为:n!=n×(n-1)×(n-2)……2×1,即n!=n×(n-1)!,因此factorial(intn)的递归过程为:return n*factorial(n-1)。
(1)先考虑最简单的情况,n为1(或小于1)时返回值应该为1,即factorial(1)=1,这是递归结束条件,如果n大于1则递归调用自己。
(2)n >1时,此时递归函数调用自己,即factorial(n)=n*factorial(n-1),此时的函数的返回值是n*factorial(n-1),如此来实现递归调用。