遞歸有一個堆棧的概念,那就意味著他是一個反理解的過程:就象數(shù)學(xué)遞推一樣,你知道第一項(xiàng),第二項(xiàng),又知道通項(xiàng)公式,那你就可以知道任何一項(xiàng)。
創(chuàng)新互聯(lián)建站2013年至今,先為黃埔等服務(wù)建站,黃埔等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為黃埔企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
然后你看代碼:fun(0)==0,fun(1)==1;是告訴你一二項(xiàng)。
fun(n)==fun(n-1)+fun(n-2);是告訴你通項(xiàng)公式。那么,你就可以知道任何一項(xiàng)。你這樣理解就差不多了,具體機(jī)器是怎么操作的,那很復(fù)雜的,也不需要明白?。。?!
#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主函數(shù)改正
{
int
num1,num2;
scanf("%d%d",num1,num2);
printf("%d和%d的\n最大公約數(shù)為:%d\n最小公倍數(shù)為:%d\n",num1,num2,gys(num1,num2),gbs(num1,num2));
}
#includelt;stdio.hgt;//0和任意的一個數(shù)的最大公約數(shù)就是那個數(shù)(最小公倍數(shù)就是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("請輸入兩個整數(shù):");
scanf("%d%d",a,b);
q=yue(a,b);
p=bei(a,b,q);//最小公倍數(shù)=兩數(shù)的乘積除以它們的最大公約數(shù)
printf("最大公約數(shù)是:%d\n最小公倍數(shù)是:%d\n",q,p);
}
擴(kuò)展資料:
#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(最小公倍數(shù))=m*n/gys(最大公約數(shù));
然后求最大公約數(shù)用歐幾里得輾轉(zhuǎn)相除法;代碼很短的。
#include"stdio.h"
int gys(int m,int n)
{
return n==0?m:gys(n,m%n);
}//這個函數(shù)求出了最大公約數(shù)
int main()
{
int m,n;
scanf("%d%d",m,n);
printf("最大公約數(shù)為%d 最小公倍數(shù)為%d\n",gys(m,n),m*n/gys(m,n));
return 0;
}