问题描述
- 求大神帮我看看这段代码,打印完“12345”结束for循环后为什么还能继续运行?新手没金币,抱歉!
- public class Test {
public static void main(String[] args) { prints(0 0 0 0 0);}public static void prints(int k1int k2int k3int k4int k5){ if(k5!=0){ System.out.println(k1*10000+k2*1000+k3*100+k4*10+k5); } for(int i=1;i<=5;i++){ if(k1==0) prints(ik2k3k4k5); else if(k2==0){ if(i==k1) continue; else prints(k1ik3k4k5); } else if(k3==0){ if(i==k2||i==k1) continue; else prints(k1k2ik4k5); } else if(k4==0){ if(i==k3||i==k2||i==k1) continue; else prints(k1k2k3ik5); } else if(k5==0){ if(i==k4||i==k3||i==k2||i==k1) continue; else prints(k1k2k3k4i); } }}
}
解决方案
没有贴打印结果,猜测是你这个是不是递归没有控制好,陷入死循环了?
解决方案二:
因为你这是for循环+递归,每个k值都会从1到5循环遍历一遍。如果要递归方式只输出12345
那每个prints后面加上break。比如
if(k1==0) { prints(ik2k3k4k5); break;//只循环一次,跳出。 }else if(k2==0){ if(i==k1) continue; else { prints(k1ik3k4k5); break; } }
解决方案三:
你想输出什么,是
00000
00001
00002
....
12345
么?
解决方案四:
因为用了continue循环仍旧运行。改用break试试
解决方案五:
第一次进入for循环后就能输出12345,输出完毕后继续循环
解决方案六:
没看出你这段代码的意图,递归写的有点乱,最好的办法就是单步执行一下,看是不是你想要的
解决方案七:
你在prints()里边一直调prints(),当然死循环啦
解决方案八:
这是一直递归啊,没有判断何时停止,肯定一直递归一直递归一直。。。
解决方案九:
并不是从0枚举到12345,而是每一位从1枚举到5,从而实现全排列。
可以理解为每次只改变当前为0的那一位,并使五个数字不相同。
时间: 2024-08-30 22:39:24