码迷,mamicode.com
首页 > 其他好文 > 详细

递归的理解

时间:2016-12-12 19:02:14      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:alt   tle   技术   函数   汉诺塔   main   printf   pes   key   

理解递归的最重要的一点是不要去纠结递归函数中的一些细节到地是怎么实现的,这个例子在上一篇的汉诺塔问题中的到了充分的体现。

 

本篇文章只要是实现最大公倍数的递归实现方法。

 

最大公倍数是指两个数能够被一组数同时整除,其中最大的那个数就叫做最大公倍数,求解最大公倍数这里主要说两个想法,其实就是将复杂的问题简化逐步简化到一个很小的问题,然后求得答案。

 

假设有两个数 252和105

252 : 21*12

105 : 21 * 5

 

252 - 105 = 147  = 21 * 7

两个数相减后他的最大公倍数是不变的,所以,可以用这种方法一直递减来实现算法

 

除法和递减的性质其实是一样的

 

#include "stdafx.h"  
//辗转相减法  
int max_yinshu1(int a , int b){  
int temp = 1;  
int tempa = a;  
int tempb = b;  
int tempc = 0;  
printf("--------------辗转相减法过程--------------\n");  
while(tempa != 0){  
if(tempa < tempb){tempc = tempa;tempa = tempb;tempb = tempc;}  
tempc = tempa - tempb;  
printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc);  
tempa = tempc;  
}  
return tempb;  
}  
//辗转相除法  
int max_yinshu2(int a , int b){  
int temp = 1;  
int tempa = a;  
int tempb = b;  
int tempc = 0;  
printf("--------------辗转相除法过程--------------\n");  
/*while(tempa != 0){ 
if(tempa < tempb){tempc = tempa;tempa = tempb;tempb = tempc;} 
tempc = tempa % tempb; 
printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc); 
tempa = tempc; 
}*/  
while(tempb != 0){  
tempc = tempa % tempb;  
printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc);  
tempa = tempb;  
tempb = tempc;  
}  
return tempa;  
}  
//递归法  
int max_yinshu3(int a , int b){  
if(a%b == 0) return b;
else{  
printf("tempa = %d; tempb = %d; tempc = %d\n" , a , b , a%b);  
return max_yinshu3(b , a%b);  
}  
}  
int _tmain(int argc, _TCHAR* argv[])  
{  
int a = 0;  
int b = 0;  
int data1 = 0;  
int data2 = 0;  
int data3 = 0;  
while(scanf("%d%d" , &a , &b)){  
data1 = max_yinshu1(a , b);  
printf("最大公因数为 :%d\n" , data1);  
data2 = max_yinshu2(a , b);  
printf("最大公因数为 :%d\n" , data2);  
printf("--------------递归过程--------------\n");  
data3 = max_yinshu3(a , b);  
printf("最大公因数为(递归法) :%d\n" , data3);  
}  
return 0;  
}  

技术分享

  1. #include "stdafx.h"  
  2. //辗转相减法  
  3. int max_yinshu1(int a , int b){  
  4. int temp = 1;  
  5. int tempa = a;  
  6. int tempb = b;  
  7. int tempc = 0;  
  8. printf("--------------辗转相减法过程--------------\n");  
  9. while(tempa != 0){  
  10. if(tempa < tempb){tempc = tempa;tempa = tempb;tempb = tempc;}  
  11. tempc = tempa - tempb;  
  12. printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc);  
  13. tempa = tempc;  
  14. }  
  15. return tempb;  
  16. }  
  17. //辗转相除法  
  18. int max_yinshu2(int a , int b){  
  19. int temp = 1;  
  20. int tempa = a;  
  21. int tempb = b;  
  22. int tempc = 0;  
  23. printf("--------------辗转相除法过程--------------\n");  
  24. /*while(tempa != 0){ 
  25. if(tempa < tempb){tempc = tempa;tempa = tempb;tempb = tempc;} 
  26. tempc = tempa % tempb; 
  27. printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc); 
  28. tempa = tempc; 
  29. }*/  
  30. while(tempb != 0){  
  31. tempc = tempa % tempb;  
  32. printf("tempa = %d; tempb = %d; tempc = %d\n" , tempa , tempb , tempc);  
  33. tempa = tempb;  
  34. tempb = tempc;  
  35. }  
  36. return tempa;  
  37. }  
  38. //递归法  
  39. int max_yinshu3(int a , int b){  
  40. if(a%b == 0) return b;E:\c_file\test4_max_yinshu\max_yinshu.c\max_yinshu.c\max_yinshu.c.cpp 2  
  41. else{  
  42. printf("tempa = %d; tempb = %d; tempc = %d\n" , a , b , a%b);  
  43. return max_yinshu3(b , a%b);  
  44. }  
  45. }  
  46. int _tmain(int argc, _TCHAR* argv[])  
  47. {  
  48. int a = 0;  
  49. int b = 0;  
  50. int data1 = 0;  
  51. int data2 = 0;  
  52. int data3 = 0;  
  53. while(scanf("%d%d" , &a , &b)){  
  54. data1 = max_yinshu1(a , b);  
  55. printf("最大公因数为 :%d\n" , data1);  
  56. data2 = max_yinshu2(a , b);  
  57. printf("最大公因数为 :%d\n" , data2);  
  58. printf("--------------递归过程--------------\n");  
  59. data3 = max_yinshu3(a , b);  
  60. printf("最大公因数为(递归法) :%d\n" , data3);  
  61. }  
  62. return 0;  
  63. }  

递归的理解

标签:alt   tle   技术   函数   汉诺塔   main   printf   pes   key   

原文地址:http://www.cnblogs.com/havihouston/p/6165243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!