问题:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:
- n∈set(n);
- 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;
- 按此规则进行处理,直到不能再添加自然数为止。
例如,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


