欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

java猴子吃桃问题

时间:2023-06-15

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。编程求第一天共摘了多少桃子。

得到的条件是最后一天还剩下一个,第九天等于第十天 + 1 再乘以 2,第八天等于第九天 + 1乘以 2,以此类推。递归必须要有终止条件,此问题的终止条件为 第十天返回 1 ,也就是 n == 10 时,return 1,而第九天的数量可以表示为 (n+1)*2 ,此时n为第八天也就是 monEatPea(n+1), 所以得到最终的递归循环为 (monEatPea(n+1)+1)*2,得到递归的方法为(加上约束):

public int monEatPea(int n){ if(n == 10){ return 1; }else if(n >= 1 && n <= 9){ return (monEatPea(n+1)+1)*2; }else{ return -1; }}

上面这种写法可以计算一到十天任一一天的剩的桃子数字,如果题中没有给出第十天还剩 1 颗桃子,可以采用另外一种逆向思维,就是最后一天剩下一颗,即 n == 1时,return 1,该写法只要求天数大于0即可,输入的是天的总数,第一天有的桃子。

public int monEatPea(int n){ if(n == 1){ return 1; }else if(n > 1){ return (monEatPea(n-1)+1)*2; }else{ return -1; }}

mian函数测试代码为:

public class demo18{public static void main(String[] args) {monkey m = new monkey();int sum = 0;sum = m.monEatPea(1);if(sum == -1){System.out.println("输入有误!");}else{System.out.println(sum);}}}class monkey{public int monEatPea(int n){if( n == 10){return 1;}else if(n >= 1 && n <=9){return (monEatPea(n+1)+1)*2;}else{return -1;}}}

第一种测试截图为:

第二种main方法测试为:

public class demo18{public static void main(String[] args) {monkey m = new monkey();int sum = 0;sum = m.monEatPea(10);if(sum == -1){System.out.println("输入有误!");}else{System.out.println(sum);}}}class monkey{public int monEatPea(int n){if( n == 1){return 1;}else if(n > 1){return (monEatPea(n-1)+1)*2;}else{return -1;}}}

第二种测试截图为:

 

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。