李长河 (教授)

教授 博士生导师 硕士生导师

性别:男

毕业院校:莱斯特大学

学历:研究生(博士)毕业

学位:工学博士学位

所在单位:自动化学院

职务:Professor

学科:自动化

办公地点:中国地质大学(武汉)自动化学院710室,湖北省武汉市洪山区鲁磨路388号

联系方式:027-8717 5083

Email:

实验八 函数递归算法


一、 实验目的

1、 掌握函数的嵌套调用和递归调用

2、 掌握递归算法

二、 实验内容

1. 函数嵌套调用是在被调用的函数内在调用其他函数,而递归调用时在被调用函数内调用自身。

嵌套调用的层数没有限制,而递归调用函数必须包含使递归终止的语句。

范例:求组合数 Cnm=n!/[m! (n-m)!](m为指数)

【分析】 求组合数要用到求阶乘,可将求阶乘定义为一个函数,在求组合数的函数中嵌套调用阶乘函数。

由于n!=n*(n-1)!,求阶乘是一个典型的递归算法,在此用递归方法实现。

【程序】

【注意】

(1) 因为阶乘极易发生溢出,所以n最大值取12,否则运算中会发生溢出。

(2) 在函数内定义局部变量时,变量名不应与函数名相同。例如,在A行,不可定义变量名为com; 否则程序编译会出错误。

(3)还有一种常见错误,例如:

long fac(int  i)

{  if(i==0||i==1) fac(i)=1;

else fac(i)=i*fac(i-1);

return fac(i);  }

编译此程序,会出现提示信息 Left_value required 的错误,请思考这是为什么?然后修改正确。

 

2、 用递归函数实现勒让德多项式。

 在主函数中求P4(1.5)。

 

★ 选做题3、定义递归函数实现Ackman函数。

 其中m,n为正整数。 设计程序求Acm(2,1),Acm(3,2)。