应用题   使用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,将遍历的数累乘到变量中即可。