当前位置:文档之家› C ,使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算法实现5

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

递归法: #include <iostream> 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"<<endl; cin>>m>>n; if(m<n) {
实验九
一、实验内容
教材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
cout<<"Area of point is"<<area()<<'\n'; cout<<"Area of square is"<<area(1,1)<<'\n'; cout<<"Area of trapezium is"<<area(1,0.5,1)<<'\n'; cout<<"Area of triangle is"<<area(1,sqrt(1+0.5*0.5),sqrt(1+0.5*0.5),0)<<'\n'; return 0; }
int a,b,c,d,n; cout<<"Please imput tow numbers"<<endl; 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<<"最大公约数是"<<d<<endl; return 0; }
t=m; m=n; n=t; } r=fun(m, n); cout<<"最大公约数是:"<<r<<endl; 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);
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:"<<endl; cin>>a>>b; cout<<"Acm(a,b)="<<Acm(a,b)<<endl; return 0; }
教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算
法实现
教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型, 在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main() 函数并执行。
二、实验目的
1、掌握函数的嵌套调用好递归调用 2、掌握递归算法 3、了解内联函数、重载函数、带默认参函数的定义及使用方法 4、掌握程序的多文件组织 5、掌握编译预处理的内容,理解带参数宏定义与函数的区别
area.cpp #include<cmath> #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));
} exp9_2.cpp #include<iostream> #include<cmath> #include"area.h" using namespace std; #define PI 3.14159 int main(){
三、实验步骤
教材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
return 0; }
教程 p24 实验八(2)递推法 #include<iostream> 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(){
五、思考讨论题或体会或对改进实验的建议 感觉对多文件运行结构不是很透彻,运用多文件方式3.10 #include<iostream> 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)="<<P(4,1.5)<<endl;
教程p24 使用欧几里得算法计算两个数的最大公约数,分别用递推和递归两种算
法实现
教程p26 编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型, 在area.cpp文件中定义函数,然后在Exp9_2中包含area.h,定义main() 函数并执行。
四、实验数据及处理结果
教材 3.9 #include<iostream> using namespace std; int Acm(int m,int n){
相关主题