简单递归

来源:互联网 发布:企业管理优化建议 编辑:程序博客网 时间:2024/06/05 08:50

1.猴子吃桃问题

问题描述:孙悟空第一天摘下若干蟠桃,当即吃了一半,感觉不过瘾,又多吃了一个。第二天他将剩下的桃子又吃了一般,还不过瘾,又多吃了一个。之后每天他都吃掉前一天剩下的桃子的一半零一个。到第十天再想吃时,就剩下一个桃子了,求孙悟空第一天共摘了多少个蟠桃?

算法实现:

import org.junit.Test;public class MonkeyEatFruit {//递推实现int eat01(int n){int a = 1;for(int i=2;i <= n;i++){a = a*2 + 2;}return a;}//递归实现public int eat02(int n){if(n == 1){return 1;}else{return eat02(n-1)*2 + 2;}}@Testpublic void eat01Test(){int i = eat01(10);System.out.print(i);}@Testpublic void eat02Test(){int i = eat02(10);System.out.print(i);}}
2.最大公约数和最小公倍数


最大公约数采用辗转相除法,又称欧几里得算法:
令较大数为m,较小数为n;
当m除以n的余数不等于0时,把n作为m,并把余数作为n,进行下一次循环;
当余数等于0时,返回n。

最小公倍数  =  m*n/m,n的最大公约数

import org.junit.Test;public class GcdAndLcm {public int gcdDemo1(int m,int n){int a;int x = Math.max(m, n);int y = Math.min(m, n);m=x;n=y;for(;;){//如果m/n 余数不为零 if(x%y != 0){a = x%y;x = y;y = a;}else{//如果m/n 余数为零  返回nbreak;}}return y;}public int gcd02(int m,int n){int x = Math.max(m,n);int y = Math.min(m,n);if(x%y == 0){return y;}else{return gcd02(y,x%y);}}public int lcm(int m,int n){return m*n/gcd02(m,n);}@Testpublic void demoTest(){int num = gcdDemo1(60,24);System.out.print(num);}@Testpublic void demo2Test(){int num = gcd02(60,24);System.out.print(num);}@Testpublic void lcmTest(){int num = lcm(60,24);System.out.print(num);}}


0 0
原创粉丝点击