栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java猴子吃桃问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java猴子吃桃问题

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第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;
		}
	}
}

第二种测试截图为:

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736162.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号