一:实验3—10
有关两个整数的最大公约数和最小公倍数程序:
#include<iostream>
#include<cmath>
using namespace std;
int ful(int i,int j){
int temp ;
if(i<j)
{
temp=i;
i=j;
j=temp;
}
while(j!=0){
temp=i%j;
i=j;
j=temp;
}
return i;
}
int main()
{
int i,j,x,y;
cout<<"请输入一个正整数";
cin>>i;
cout<<"请输入另一个正整数" ;
cin>>j;
x=ful(i,j);
y =i*j/x;
cout<<i<<"和"<<j<<"的最大公约数是:"<<x<<endl;
cout<<i<<"和"<<j<<"的最小公倍数是:"<<y<<endl;
return 0;
}
二:实验3—13
用递归方法编写函数:
#include<iostream>
using namespace std;
int fib(int n){
if(n==1||n==2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int main()
{
int a,b;
cout<<"输入一个数a:"<<endl;
cin>>a;
b=fib(a);
cout<<b<<endl;
return 0;
}
三:实验3—15
编写递归函数getpower计算x的y次方
#include<iostream>
using namespace std;
int getpower(int x,int y)
{
if(y==1)
return x;
else if(y==0)
return 1;
else if(y<0)
return 0;
else
return (x*getpower(x,y-1));
}
double gerpower(double x,int y)
{
if(y==1)
return x;
else if (y==0)
return 1;
else if(y<0)
return 1/getpower(x,-y);
else
return (x*getpower(x,y-1));
}
int main(){
int inumber,ianswer ,power;
double dnumber,danswer;
cout<<"Enter an int base number:";
cin>>inumber;
cout<<"Enter a double base number:";
cin>>dnumber;
cout<<"To what power?";
cin>>power;
ianswer=getpower(inumber,power);
danswer=getpower(dnumber,power);
cout<<inumber<<"to the "<<power<<"the power is"<<ianswer<<endl;
cout<<dnumber<<"to the "<<power<<"the power is"<<danswer<<endl;
return 0;
}
四:3—16
当函数发生递归调用时,同意局部变量在不同递归深度上可以同时存在不同的取值,这在底层时如何做到的?
答:对同一函数的多次不同的调用,编译器会为函数的形参和局部变量分配不同的空间。
举个例子,用递归方法求n的阶乘
#include<iostream>
using namespace std;
int fun(int a){
if(a==1)
return 1;
else
return (a*fun(a-1));
}
int main(){
int a,b;
cout<<"输入一个整数:";
cin>>a;
b=fun(a);
cout<<b;
return 0;
}
总结:
实验3—13:递归就是自己调用自己
实验3—15:函数重载的情况调用时注意对应形参的类型和形参的个数
实验3—16:递归函数被调用时,系统会保存函数部分信息,如:保存调用函数的返回值,调用函数的局部变量值,还没进入下一个递归调用时,系统会对此保存记录。每返回一层递归调用,就会记录调用信息。
递归调用和普通函数调用本质相同,递归调用是调用自身,或者是几个函数相互调用,导致循环递归。