应用题
使用VC++6.0打开下的源程序文件2.cpp。请完成以下两个函数。
(1)fun1(int n)求出n的阶乘,必须使用递归调用。
(2)fun2(int n)求出n的阶乘,不能使用递归调用。如果n小于1则返回0。
注意:不能修改函数的其他部分。
试题程序:
#include<iostream.h>
//必须使用递归
int funl(int n)
{
}
//不能使用递归
int fun2(int n)
{
}
void main()
{
int i;
cout<<'请输入一个整数:'<<endl;
cin>>i;
cout<<'输入数字的阶乘是:'<<fun1(i)<<endl;
cout<<'输入数字的阶乘是:'<<fun2(i)<<endl;
return;
}
【正确答案】//必须使用递归 int funl(int n) { if(n<=0) return 0; if(n=1) return 1; return n*funl(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,将遍历的数累乘到变量中即可。