c++,使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现5

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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));

相关文档
最新文档