递归
递归不一定非要像斐波拉契数列一样在return中调用函数
递归的结束条件就是初始条件值
通常的方法将递归调用放在if语句中
n!通过递归实现(常用方法还是通过while实现)
def jiecheng(n):
if n==0:
return 1
else:
sum=n*jiecheng(n-1)#右边只有阶乘表达式,没有什么sum项
return sum
斐波拉契数列:
def fib(n):
if n==0:
return 0
elif n==1 or n==2:
return 1
else:
return fib(n-1)+fib(n-2)#这里会把最终的值通过不断调用,计算出有多少个f0,f1,f2
斐波拉契数列是递归调用一次,而二叉树是两次递归调用
问题:
1、递归是等一直递归完后再往下运行吗?
2、后面出现递归的情况,前面的递归处的语句是继续执行吗?
3、递归后每一层都执行了所有语句吗?
递归的理解:https://www.cnblogs.com/xzxl/p/7364515.html
关键理解:recurs()进行了5次递归调用,则第一个statements1部分将按函数调用的顺序执行5次,然后statements2部分将以与函数调用相反的顺序执行5次。进入5层递归后,程序将沿进入的路径返回。(第一个递归调用正向5次,知道5次执行完再反过来执行第二个递归调用)
参考链接:https://blog.csdn.net/allenchenhh133/article/details/80291252
1、 以二叉树的左子树,前序遍历为例说明:当递归到空的时候, 会返回到根节点D,接下来程序会从递归的那个地方往后执行,显然就对应着D的右子树了
2、这里内层函数是两个(这个之前不是这样理解的,解释递归到返回后下一步就是左边的右子树了),所以左子树就能全部打印出
3、递归的退出条件,也就是空子树就返回,直接返回到上一个节点