递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
创新互联建站2013年至今,先为黄埔等服务建站,黄埔等地企业,进行企业商务咨询服务。为黄埔企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
#include
"stdio.h"
int
gys(int
x,
int
y)
{
int
i;
for(i=xy?x:y;
i=1;
i--)
{
if(x%i==0
y%i==0)
{
return(i);
break;
}
}
return
0;//加个返回
}
int
gbs(int
x,
int
y)
{
int
i,k;
k=1;
for(i=xy?x:y;
i=x*y;
i=i*k++)
{
if(i%x==0
i%y==0)
{
return(i);
break;
}
}
return
0;//加个返回
}
void
main()
//main主函数改正
{
int
num1,num2;
scanf("%d%d",num1,num2);
printf("%d和%d的\n最大公约数为:%d\n最小公倍数为:%d\n",num1,num2,gys(num1,num2),gbs(num1,num2));
}
#includelt;stdio.hgt;//0和任意的一个数的最大公约数就是那个数(最小公倍数就是0)
int yue(int x,int y)
{
int m,t;
if(ygt;x)
{
t=x;//将x与y的值交换
x=y;
y=t;
}
while(y!=0)
{
m=x%y;
x=y;
y=m;
}
return x;
}
int bei(int x,int y,int p)
{
return(x*y/p);
}
int main()
{
int yue(int,int);
int bei(int,int,int);
int p,q,a,b;
printf("请输入两个整数:");
scanf("%d%d",a,b);
q=yue(a,b);
p=bei(a,b,q);//最小公倍数=两数的乘积除以它们的最大公约数
printf("最大公约数是:%d\n最小公倍数是:%d\n",q,p);
}
扩展资料:
#includelt;iostreamgt;
using namespace std;
int i;
int max(int a,int b)
{
//coutlt;lt;"max";
int s;s=i=2;
//coutlt;lt;slt;lt;endl;
if(agt;b)
{
i=b;
}
else
i=a;
do{
if(a%i==0b%i==0)
{
//coutlt;lt;"do里面的s!"lt;lt;slt;lt;endl;
//coutlt;lt;"do里面的i!"lt;lt;ilt;lt;endl;
s=i;
break;
}
i--;
}while(ilt;ailt;b);
//coutlt;lt;"end的s!"lt;lt;slt;lt;endl;
//coutlt;lt;"end的i!"lt;lt;ilt;lt;endl;
return s;
}
int min(int a,int b)
{
//coutlt;lt;"min";
int s;s=1;i=2;
do{
if(i%a==0i%b==0)
{
//coutlt;lt;"do里面的s!"lt;lt;slt;lt;endl;
//coutlt;lt;"do里面的i!"lt;lt;ilt;lt;endl;
s=i;break;
}
i++;
}while(ilt;=a*b);
//coutlt;lt;"end的s!"lt;lt;slt;lt;endl;
//coutlt;lt;"end的i!"lt;lt;ilt;lt;endl;
return s;
}
int main()
{
int x,y,m,n;
cingt;gt;xgt;gt;y;
m=max(x,y);n=min(x,y);
coutlt;lt;mlt;lt;""lt;lt;n;
}
首先明确gbs(最小公倍数)=m*n/gys(最大公约数);
然后求最大公约数用欧几里得辗转相除法;代码很短的。
#include"stdio.h"
int gys(int m,int n)
{
return n==0?m:gys(n,m%n);
}//这个函数求出了最大公约数
int main()
{
int m,n;
scanf("%d%d",m,n);
printf("最大公约数为%d 最小公倍数为%d\n",gys(m,n),m*n/gys(m,n));
return 0;
}