算法分析:设计一个递归算法求两个正整数x,y的最大公约数(gcd:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数) 。并转换为非递归算法。

  • Post author:
  • Post category:其他


一、结果图

二、源代码



package



sy1;



import



java.util.Scanner;


/**


*



@author




*


*/



public




class



Sy1_1 {


// 找出两数的较小值



static




int



min(



int



a


,



int



b


) {



return



a


<


b


?


a


:


b


;


}


// 找出两数的较大值



static




int



max(



int



a


,



int



b


) {



return



a


>


b


?


a


:


b


;


}


// 递归算法 –由提示可得




gcd




(a,b)=




gcd




(




min




(a,b),max(a,b)%




min




(a,b))



static




int



gcd(



int



a


,



int



b


) {


// 递归的出口



if



(


b


== 0) {


System.




out




.println(


a


);



return



0;


}



else



{



// 递归的规律



return




gcd



(



min



(


a


,


b


),



max



(


a


,


b


) %



min



(


a


,


b


));


}


}


// 非递归算法,for循环



static




int



notgcd(



int



a


,



int




b



) {



for



(;;) {



if



(



b



== 0) {


System.




out




.println(


a


);



return



0;


}



else



{



// 注意运行顺序,前一步是否会对后一步产生影响



int



x


=



min



(


a


,



b



);



int



y


=



max



(


a


,



b



) %



min



(


a


,



b



);


a


=


x


;



b



=


y


;


}


}


}



public




static




void



main(String[]


args


) {


//



TODO



自动生成的方法存根


Scanner




sc




=



new



Scanner(System.




in




);


System.




out




.println(


“输出你想求的两个正整数”


);



int



i


=


sc


.nextInt();



int



j


=


sc


.nextInt();


System.




out




.println(


“递归后最大公约数是;”


);



gcd



(


i


,


j


);


System.




out




.println(


“输出你想求的两个正整数”


);



int



k


=


sc


.nextInt();



int



q


=


sc


.nextInt();


System.




out




.println(


“非递归最大公约数是;”


);



notgcd



(


k


,


q


);


}


}



版权声明:本文为qq_57260499原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。