深刻理解递归算法javascript
人理解迭代,神理解递归java
递归与循环的区别算法
递归:你打开面前这扇门,看到屋里面还有一扇门(这门可能跟前面打开的门同样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还能够打开它,你推开门,发现里面还有一扇门,你继续打开,。。。, 若干次以后,你打开面前一扇门,发现只有一间屋子,没有门了。 你开始原路返回,每走回一间屋子,你数一次,走到入口的时候,你能够回答出你到底用这钥匙开了几扇门。code
循环:你打开面前这扇门,看到屋里面还有一扇门,(这门可能跟前面打开的门同样大小(静),也可能门小了些(动)),你走过去,发现手中的钥匙还能够打开它,你推开门,发现里面还有一扇门,(前面门若是同样,这门也是同样,第二扇门若是相比第一扇门变小了,这扇门也比第二扇门变小了(动静如一,要么没有变化,要么一样的变化)),你继续打开这扇门,。。。,一直这样走下去。 入口处的人始终等不到你回去告诉他答案。递归
模型一: 在递去的过程当中解决问题ip
function recursion(大规模){ if (end_condition){ // 明确的递归终止条件 end; // 简单情景 }else{ // 在将问题转换为子问题的每一步,解决该步中剩余部分的问题 solve; // 递去 recursion(小规模); // 递到最深处后,不断地归来 } }
模型二: 在归来的过程当中解决问题it
function recursion(大规模){ if (end_condition){ // 明确的递归终止条件 end; // 简单情景 }else{ // 先将问题所有描述展开,再由尽头“返回”依次解决每步中剩余部分的问题 recursion(小规模); // 递去 solve; // 归来 } }
/** * 关于 递归中 递进和回归的理解 * @param n */ public static void recursion_display(int n) { int temp=n;//保证先后打印的值同样 System.out.println("递进:" + temp); if (n > 0) { recursion_display(--n); } System.out.println("回归:" + temp); }