/**
* 使用递归打印1-10
*/
public class Demo12 {
public static void main(String[] args) {
m(10);
}
public static void m(int i){
if (i==0){
return;
}
i--;
m(i);
System.out.print(i+1);
}
}
第一种方法:👆
public class Demo15 {
static int n = 1;
public static void main(String[] args) {
m(10);
}
public static void m(int i){
i--;
if (i>=n){
m(i);
}
System.out.println(i+1);
}
}
第二种方法:👆
两种方法都是用递归的方式进行打印的 ,第一种方法应注意的是判断语句,输出语句,递归调用时的顺序,及变量i自减的位置。位置不一样,所导致的结果也不尽相同,作者给出的打印结果为1-10,自减和输出语句的位置变动会可能会导致结点的1或10顾及不到。 第二种方法是声明一个静态变量,目的是在程序循环执行时,i 只会执行1次,如果在方法体中声明变量i 会导致每次循环i的值都会被重置,从而导致运行结果的改变。
两种方式运行的结果相同,帮助理解递归的逻辑(可能不止两种,作者只会两种)
下面对应的10-1 的打印,帮助理解
第一种:👇
/**
* 使用递归算法打印10-1
*/
public class Demo13 {
public static void main(String[] args) {
m(10);
}
public static void m(int i){
if (i>0) {
System.out.println(i);
i--;
m(i);
}
//return;
}
}
第二种:👇
public class Demo14 {
static int n=0 ;
public static void main(String[] args) {
m(10);
}
public static void m(int i){
System.out.println(i);
i--;
if (i>n){
m(i);
}
}
}
10-1 的打印可以看出,就是因为同上面的1-10的打印的输出语句的位置有所变化,而导致的 运行结果的截然不同,递归的思想我认为就是判断语句之前应该做什么,之后应该做什么,先后位置的不同,就会产生不同的结果。
我们应练习过后自己尝试自己的独立完成,独立完成之后我们就会对递归的思想有深刻的认识。
稍稍加深理解
/** * 用递归求1-n的和 */
public class Demo11 { static int n=0; public static void main(String[] args) { int sum = sum(100);//这里n=100,想要求其他的值,将100改为想要的值 System.out.println(sum); } public static int sum(int i){ if (i>=1){ n=n+i; i--; sum(i); } return n; } }