用递归的时候 首先分析要达到什么目的 哪种情况该递归 哪种情况该直接返回结果
递归中应该有个控制递归结束的语句 当满足某种条件时候因直接返回结果 否者会产生递归的死循环
特别要注意递归时后当调用本方法时当执行完了本方法后返回的结果不是这个功能的结果不是直接返回给其他方法里的调用本方法的地方 而是返回到本方法内部调用本方法的地方 如果那个地方也是个递归则返回给它的上级 如果本方法内调用递归的地方对这个返回结果不加一处理的话 而你又要以这个返回值来控制程序接下来的流程或者赋值给哪个变量 如果程序刚好满足你递归调用的条件 那么你就算白递归了 因为返回的根本不是你希望的结果也就是递归产生的结果 而是你方法后面返回的是什么就是什么跟递归没任何关系
在调试代码时候如果代码出现了错误编译错误还好点 那么你最好先把代码丢到一边认真的根据输出信息和错误信息分析为什么输出的是这些信息或jvm报错信息有那些情况会出现这些情况 应该是那部分出现了错误 如果的到了分析结果请不要根据你记得的代码逻辑来否决你分析出来的情况不如XX行出现了一个空指针的异常不要随意的扫下代码或者断然的否决该错误认为是不可能纯在的而是要仔细的检查 如果条件永续的话你最好把你记忆中的逻辑丢到一边以一种看别人代码的心态认真的按照程序流程认真的检查一遍你的代码 不要闲麻烦 如果还是检查不出来的话可以过段时间等头脑清晰了在来检查往往会获得异乡不到的效果
/**
* 编写程序实现下述功能:打印输出1~2000之间既能被3整除又能被8整除的前15个整数,且每行只能输入5个。
*/
public class PrintNumber{
//定一一个记数器count为0
private int count=0;
//递归判断的被除数
private int bye=2;
private int bye2=3;
int number;
/**
* 循环遍历要打印的整数
*/
public void iterator(){
//System.out.println(0);
for(int number=3*8;number<2000;number++){
this.number=number;
//判断该整数是否能同时被3和8整除,如果能整除的话计数器++不能的话继续下一轮循环
// if(number%3==0 && number%8==0){
if (contains()){ //这条语句是打印出能被2到8整除的所有整数
count++;
//当计数器大于15时推出循环
if(count>15){
break;
}
print();
}
//复位每次判断的除数
bye=2;
bye2=3;
}
}
/**
*如果该计数器%6==0就用换行打印该数字不等于0就用不换行打印该数字
*也可以创建个大小为5的数组来存储数据判断数据是否存储满了如果存储满了的话就一起打印出来
*这样应该性能好点把不用一个一个的打 打印应该比算数运算来的慢些 不过也看不来毕竟只这么多内容
*/
public void print( ){
if(count%6==0){
System.out.println(number);
}else{
System.out.print(number+"\t");
}
}
/**
* 递归判断是否能否被2到8整除
* 如果能返回true 否者false;
*/
public boolean contains(){
// 判的bye是否为9,如果为9折返回true;
if (bye==9){
return true;
}
//如果number % bye++ ==0那么递归否者返回false
return number % bye++ ==0?contains():false;
}
public static void main(String[] args){
new PrintNumber().iterator();
}
// public boolean contains(){
// if(number % bye2!=0){
// return false;
// }
// bye2+=2;
// if(bye2==9 && bye2%8==0){
// return true;
// }
// if (bye2>9){
// return false;
// }
// return contains(number);
// }
// public boolean contains(){
// for (int i=2;i<=8;i++){
// if (number%i!=0){
// return false;
// }
// }
// return true;
// }
// public boolean contains(){
// if (bye==9){
// return true;
// }
// if (number % bye++!=0){
// return false;
// }
// return contains();
// }
}