:递归 -- 递归
Posted CodeJiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了:递归 -- 递归相关的知识,希望对你有一定的参考价值。
1. 递归
1.1 递归的概念
递归就是方法自己去调用自己,每次调用时传入的参数是不同的,递归有助于解决程序中复杂的问题,同时可以让代码更为简洁。可以将问题分为同一类型的子问题(分治策略),递归的核心是分治策略,递归必须有一个逼近于终点的条件。
1.2 递归可以解决的问题
- 可以解决各种数学问题,汉若塔,迷宫问题, 8皇后问题等等
- 各种算法的递归,如快排,归并排序,二分查找,分治算法等
1.3 递归的规则
- 执行一个方法时,就创建一个新的受保护的独立栈空间
- 方法的局部变量是独立的,不会相互影响。
- 如果方法中使用的是引用型类型变量,比如数组,则会共享引用型的数据
- 递归必须向退出递归的条件接近,否则就是无线递归,会出现StackOverflowError。
- 一个方法执行完毕后,或者遇到return,会就返回数据,遵守谁调用就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
2. 示例
public class multiProblem
public static void main(String[] args)
System.out.println(factorial(1));
System.out.println(factorial(2));
System.out.println(factorial(3));
System.out.println(factorial(4));
public static int factorial(int n)
if (n == 1)
return 1;
else
return factorial(n - 1) * n;
运行结果:
代码分析:
n=1 ,进入if语句 n==1 -> true -> return 1
n=2 ,进入else语句 -> return factorial(2 - 1) * 2 -> return factorial(1) *2 -> return 1 * 2
n=3 ,进入else语句 -> return factorial(3 - 1) * 3 -> return factorial(2) * 3 -> return 1 * 2 * 3
n=4 ,进入else语句 -> return factorial(4 - 1) * 3 -> return factorial(3) * 4 -> return 1 * 2 * 3 * 4
补充:演示栈溢出异常
public class sortProblem
public static void main(String[] args)
test(4);
public static void test(int n)
if (n > 2)
test(n + 1);
System.out.println("n: " + n);
运行结果:
以上是关于:递归 -- 递归的主要内容,如果未能解决你的问题,请参考以下文章