递归能解决的问题和规则
-
递归能解决什么问题
- 各种数学问题,如8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子问题(google编程大赛)
- 各种算法也会使用到递归,比如快排,归并排序,二分查找,分治算法等。
- 将用栈解决的问题->递归代码比较简洁
-
递归需要遵守的重要规则
-
执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
-
方法的局部变量是独立的,不会相互影响,比如之前n变量
-
如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据,各栈空间各自的变量中,有可能指向了同一个空间。
-
递归必须想退出递归的条件逼近,否则就无限递归,出现StackOverflowError。
- 比如打印,传入的参数是n-1,如果在条件n>2约束下,n+1,条件会越来越远离结束条件,造成无限递归。
-
当一个方法执行完毕后,或者遇到return时,就会返回,遵守谁调用,就将结果返回谁,同时当方法执行完毕后或者返回时,该方法也就执行完毕。
-