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

用递归解决半集数问题的算法思想以及Java代码的实现

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

用递归解决半集数问题的算法思想以及Java代码的实现

问题:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:

  1. n∈set(n);
  2. 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
  3. 按此规则进行处理,直到不能再添加自然数为止。
    例如,set(6)={6,16,26,126,36,136},半数集set(6)中有6个元素。

输入:
整数n(0 输出:
半数集set(n)中的元素个数。
设计递归函数,求出set(n)的个数。

首先列出足够多的半集数进行规律分析:

可见我将每一个半集数都进行了层次划分,由层次划分找寻每个半集数与其对应n的关系,通过上图不难看出奇数与其相邻小一的偶数的半集数个数相同,则可以将二者合二为一,进一步找寻规律,即设A=n/2,通过A与半集数个数的关系求寻递归函数。

通过A与半集数个数关系可分析出,当A为偶数时,下一个A对应的半集数个数为上一个A对应的半集数个数的值加上最后一个加数再加2,若A为奇数则最后一个加数大小不变。
下面附上Java源代码:

public class Set {
	static int sum=2;
	static int B=2;
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.printf("请输入一个正整数:");
		int N=scan.nextInt();
		System.out.println("半数集set("+N+")中的个数为:"+set(N/2,1));
	}
	public static int set(int A,int i)
	{
		if(A==0)
			return 1;
		else
		{
			if(i
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328021.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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