当前位置:编程学习 > JAVA >>

关于递归的一个小问题,找不到程序问题出哪里了

	public static int  find(int n){
 
n++;
String s = String.valueOf(n);
char [] ch = s.toCharArray();

//判断相邻数字是否相同
for(int i=0;i<ch.length-1;i++){
if(ch[i]==ch[i+1]){
find(n);
}
}
return n;

}

找出正整数n,比n大的最小的且不重复的整数;不重复就是相邻位数不能相同,如1112就是重复了。程序有点问题,比如我find(1111),结果出来的是1112.求大神解释 java 递归 --------------------编程问答-------------------- 这个用循环就好了
递归就是进栈出栈的操作,自己模拟一下就会发现
这样写返回的就是你输入的后一个数据 --------------------编程问答-------------------- 那个for循环有问题,比如第一次操作1112,无论操作多久,最终返回就是1112 --------------------编程问答-------------------- 还是不太明白为什么n++没有起作用
不过刚改进了一下,调试出来了

public static void find(int n){
 
n++;
String s = String.valueOf(n);
char [] ch = s.toCharArray();
boolean flag = false;

//判断相邻数字是否相同
for(int i=0;i<ch.length-1;i++){
if(ch[i]==ch[i+1]){
flag = true;
}

}
if(flag){
find(n);
}else{
System.out.println(n);
}

}
--------------------编程问答--------------------
public static int  find(int n){
          
    //n++; 去掉这一行  
    String s = String.valueOf(n);
    char [] ch = s.toCharArray();
     
    //判断相邻数字是否相同
    for(int i=0;i<ch.length-1;i++){
        if(ch[i]==ch[i+1]){
            find(n + 1);  // 这里改成n+1
        }
    }
    return n;
 
}

看看这样行不行 --------------------编程问答--------------------
引用 4 楼 wangdong20 的回复:
public static int  find(int n){
          
    //n++; 去掉这一行  
    String s = String.valueOf(n);
    char [] ch = s.toCharArray();
     
    //判断相邻数字是否相同
    for(int i=0;i<ch.length-1;i++){
        if(ch[i]==ch[i+1]){
            find(n + 1);  // 这里改成n+1
        }
    }
    return n;
 
}

看看这样行不行

看来这个方法错了
刚才我用find(1232)调试了下,发现递归可以递到1234,
但是一执行return n语句时,递归方法就返回到上一层递归调用的n
也就是说,return n最后返回的是最开始的那个n --------------------编程问答--------------------
引用 楼主 u011937099 的回复:
	public static int  find(int n){
 
n++;
String s = String.valueOf(n);
char [] ch = s.toCharArray();

//判断相邻数字是否相同
for(int i=0;i<ch.length-1;i++){
if(ch[i]==ch[i+1]){
find(n);
}
}
return n;

}

找出正整数n,比n大的最小的且不重复的整数;不重复就是相邻位数不能相同,如1112就是重复了。程序有点问题,比如我find(1111),结果出来的是1112.求大神解释

我总算改出来了,就修改了一点点
// 正确的递归方法
public static int find2(int n){
    String s = String.valueOf(n);
    char [] ch = s.toCharArray();
     
    //判断相邻数字是否相同
    for(int i=0;i<ch.length-1;i++){
        if(ch[i]==ch[i+1]){
         //System.out.println(n + 1 + "");
            return find2(n + 1);
        }
    }
    
    return n;
    //System.out.println(n + "");
 
}
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,