使用VC++6.0打开考生文件夹下的源程序文件2.cpp。请完成以下两个函数。
(1)fun1(int n)求出n的阶乘,必须使用递归调用。
(2)fun2(int n)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。
注意:不能修改函数的其他部分。
试题程序:
#include<iostream.h>
//必须使用递归
int fun1(int n)
//不能使用递归
int fun2(int n)
void main()
int i;
cout<<"请输入一个整数:"<<end1;
cin>>i;
cout<<"输入数字的阶乘是:"<<fun1(i)<<end1;
cout<<"输入数字的阶乘是:"<<fun2(i)<<end1;
return;
参考答案://必须使用递归
int fun1(int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return n*fun1(n-1);
};
//不能使用递归
int fun2(int n)
{
if(n<=0)
return 0;
int res=1;
for(int i=1;i<=n;i++)
{
res*=i;
}
return res;
}
解析: 本题考查的是递归函数和阶乘算法。递归的阶乘算法可以通过判断传入参数,如果大于1,则返回n*funl(n-1),意思是返回n乘以n-1的阶乘;如果等于1,则返回1。这样递归下去就能最终得出n的阶乘。非递归算法可以先建立一个累乘变量,并初始化为1,然后循环遍历1~n,将遍历的数累乘到变量中即可。