递归的浅显理解
假设我们要计算一个函数:$f(n)=n*f(n-1)$
递归三要素
递归的定义:接受什么参数,返回什么值,代表什么意思 。当函数直接或者间接调⽤⾃⼰时,则发⽣了递归
递归的拆解:每次递归都是为了让问题规模变⼩
**递归的出⼝:**必须有⼀个明确的结束条件。因为递归就是有“递”有“归”,所以必须又有一个明确的点,到了这个点,就不用“递下去”,而是开始“归来”。
|
|
我调用了这个函数,函数需要给我返回一个值,而这个值又取决于我这个函数,只不过函数的变量发生了变化
|
|
假设给定的二叉树是对称的:
-
从1开始,因为1不为空,所以调用了recur函数,此时recur函数的变量为(2,2),我调用了这个函数,函数需要给我返回一个值,true 或 false
-
recur(2,2) 由于都不满足(L==null&&R==null) ;(L==null||R==null || L.data!=R.data),所以会调用recur(L.LeftNode,R.RightNode)&&recur(L.RightNode,R.LeftNode) ,即recur(3,3)&&recur(4,4)。此时recur(2,2)的值取决于recur(3,3)&&recur(4,4)
-
其中recur(3,3)由于都不满足(L==null&&R==null) ;(L==null||R==null||L.data!=R.data),所以会调用recur(L.LeftNode,R.RightNode)&&recur(L.RightNode,R.LeftNode) ,即recur(null,null)&&recur(null,null),此时recur(3,3)的值取决于recur(null,null)&&recur(null,null)
- 因为recur(null,null)满足了(L==null&&R==null),所以返回true,所以recur(3,3)==true
-
其中recur(4,4)由于都不满足(L==null&&R==null) ;(L==null||R==null||L.data!=R.data),所以会调用recur(L.LeftNode,R.RightNode)&&recur(L.RightNode,R.LeftNode) ,即recur(null,null)&&recur(null,null),此时recur(3,3)的值取决于recur(null,null)&&recur(null,null)
- 因为recur(null,null)满足了(L==null&&R==null),所以返回true,所以recur(4,4)==true
-
-
因为recur(3,3)==true 且 recur(4,4)==true,所以recur(2,2)==true,所以总的返回值为true