三、程序填空题 使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成以下两个函数: (1)funl(int n);求出n的阶乘,必须使用递归调用。 (2)fun2(int n);求出n的阶乘,不能使用递归调用。 如果n小

admin2013-09-11  10

问题 三、程序填空题
使用VC6打开考生文件夹下的源程序文件modi2.cpp。请完成以下两个函数:
    (1)funl(int n);求出n的阶乘,必须使用递归调用。
    (2)fun2(int n);求出n的阶乘,不能使用递归调用。
    如果n小于1则返回0。
注意:请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
    #include
    //必须使用递归
    int funl(int n)
    {
    };
    //不能使用递归
    int fun2(int n)
    {
    }
    void main()
    {
    int i;
    cout<<”请输入一个整数:”<    cin>>i;
    cout<<”输入数字的阶乘是:”<    cout<<”输入数字的阶乘是:”<    return;
    }

选项

答案intfunl(int n)//递归计算阶乘 { if(n<=o)//n、于等于0,直接返回0 return 0: if(n=1) //n等于l直接返回1 return1: returnnfunl(n.1);//n大于等于1,通过递归计算n! }; //不使用递归计算阶乘 intfun2(intn) { if(n<=0) //n小于0,直接返回0 return0: int res=1; //初始化阶乘存放变量teN for(int i=l;i<=11;i++)//通过循环计算n! { res*=i; } return res; }

解析  (1)该程序功能是对阶乘的实现。其中,阶乘的计算公式定义为:
    fn!=n木(c一1)*(c一2)*…*1  n>1
    n=1  计算公式:n!=1
公式分为参数n是1和大于1的两种情况,例如:1的阶乘1!=1;5的阶乘5 1=5×4×3×2×1。
[解题思路]
(1)进入funl函数,根据前面的定义,它对阶乘算法的实现可以分为三种情况,一是当n小于或等于0时,返回0即可;二是当n大于1时应该用什么程序来实现阶乘的计算;三是当n=1时,函数直接返回1即可。
(2)计算n!的值,先定义一个放阶乘值的变量res,初值为1,通过循环的方法,用累乘器“res*=i;”实现n!。
转载请注明原文地址:https://kaotiyun.com/show/9zBD777K
0

最新回复(0)