关于递归的一个小问题,找不到程序问题出哪里了
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;
}
看看这样行不行 --------------------编程问答--------------------
看来这个方法错了
刚才我用find(1232)调试了下,发现递归可以递到1234,
但是一执行return n语句时,递归方法就返回到上一层递归调用的n
也就是说,return n最后返回的是最开始的那个n --------------------编程问答--------------------
我总算改出来了,就修改了一点点
// 正确的递归方法
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