c++,使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现5
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验九
一、实验内容
教材3.9 定义递归函数实现下面的Ackman函数
n+1 m=0
Acm(m,n)= Acm(m-1,1) n=0
Acm(m-1,Acm(m,n-1)) n>0,m>0
教材3.10 用递归法实现勒让德多项式:
1 n=0
Pn= x n=1
((2n-1)xPn-1(x)-(n-1)Pn-2(x))/n
教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现
教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型,在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main()
函数并执行。
二、实验目的
1、掌握函数的嵌套调用好递归调用
2、掌握递归算法
3、了解内联函数、重载函数、带默认参函数的定义及使用方法
4、掌握程序的多文件组织
5、掌握编译预处理的内容,理解带参数宏定义与函数的区别
三、实验步骤
教材3.9 定义递归函数实现下面的Ackman函数
n+1 m=0
Acm(m,n)= Acm(m-1,1) n=0
Acm(m-1,Acm(m,n-1)) n>0,m>0
教材3.10用递归法实现勒让德多项式:
1 n=0
Pn= x n=1
((2n-1)xPn-1(x)-(n-1)Pn-2(x))/n
教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现
教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型,在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main()
函数并执行。
四、实验数据及处理结果
#include
using namespace std;
int Acm(int m,int n){
if(m==0) return n+1;
else{
if(n==0) return Acm(m-1,1);
else return Acm(m-1,Acm(m,n-1));
}
int main(){
int a,b;
cout<<"please imput two numbers:"< cin>>a>>b; cout<<"Acm(a,b)="< return 0; } 教材3.10 #include using namespace std; double P(int n,double x){ if(n==0) return 1; if(n==1) return x; return ((2*n-1)*x*P(n-1,x)-(n-1)*P(n-2,x))/n; } int main(){ cout<<"P(4,1.5)="< } 教程p24 实验八(2)递推法 #include using namespace std; int max(int x,int y){ return(x>=y?x:y); } int min(int a,int b){ return(a<=b?a:b); } int main(){ int a,b,c,d,n; cout<<"Please imput tow numbers"< cin>>a>>b; c=max(a,b); d=min(a,b); n=c%d; while(n!=0){ c=d; d=n; n=c%d; } cout<<"最大公约数是"< return 0; } 递归法: #include using namespace std; int fun(int x, int y){ if (x%y==0) return y; else return fun(y, x%y); } int main( ){ int m, n, t, r; cout<<"please imput two numbers"< cin>>m>>n; if(m t=m; m=n; n=t; } r=fun(m, n); cout<<"最大公约数是:"< return 0; } 教材p26 area.h double area(double radius=0); double area(double a,double b); double area(double a,double b,double h); double area(double a,double b,double c,int); area.cpp #include #define PI 3.14159 double area(double radius){ return PI *radius*radius; } double area(double a,double b){ return a*b; } double area(double a,double b,double h){ return (0.5*(a+b)*h); } double area(double a,double b,double c,int){ double s=0.5*(a+b+c); return sqrt(s*(s-a)*(s-b)*(s-c));