= = = = 方法递归调用 = = = =
前言:刚开始学习递归的时候是有一定困难的,光用自己的脑子去想,去无限被套娃真的是非常的痛苦…这一模块拖了好长时间,通过查找一些资料也终于有了自己的一些理解和心得体会。
一、基本介绍
1、简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变 得简洁。
二、递归调用机制(举例说明)
以下两个问题都可参考递归的重要规则,只有知道它的规则、原理才能更好的理解它。
1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2.方法的局部变量是独立的,不会相互影响,比如n变量
3.如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据。
4。递归必须向退出递归的条件逼近,否则就是无限递归,出现
StackOverflowError,死龟了:)
5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
例:
①打印问题
打印问题虽然简单,但是初次接触到也很容易搞错,就算没错的也对它的调用执行机制模模糊糊说不上来。
public class Recursion01 {
//编写一个 main 方法
public static void main(String[] args) {
T t1 = new T();
t1.test(4); //输出什么? n=2 n=3 n=4
int res = t1.factorial(5);
System.out.println("5 的阶乘 res =" + res)
}
}
class T {
public void test(int n) {
if (n > 2) {
test(n - 1);
}
System.out.println("n=" + n);
}
②阶乘问题
//factorial 阶乘
public int factorial(int n) {
if (n == 1) {
return 1;
} else {
return factorial(n - 1) * n;
}
}