1.函数递归是函数式编程的重要组成部分,所以对函数递归的深层次理解十分重要。本人用图示的方法解释函数的层级递归方式,先理解下面的函数

deftest(n):if n == 1:return 1
else:
res= n*test(n-1)return res

从test函数中我们可以看出这个是解决n的阶乘计算的函数,首先对于递归函数必须具备递归结束条件,因为不能造成无限递归,否则会消耗掉计算机的内存直至报错。本函数的结束条件是n=1时函数返回1,因为1的阶乘就是1。代表递归结束

那么本函数是如何进行递归的呢。看下面图示

1.首先应该明白函数在内存的表现就是一个变量,当代码中出现def定义函数时,那么这段关于函数的代码就存在内存中,当函数被调用的时候,就会在内存中读取代码然后执行。

2图中所示test(4)是执行计算4的阶乘,开始执行函数时n=4(函数第一层),代码逐行运行,因为n!=1那么就会执行else代码块中的代码res=n*test(n-1)这时出现了test函数的调用那么就会去执行test函数代码(第一层中的return res 这句代码不会执行),此时传入n的值是3,也就是执行第二层函数,依然同第一层一样n!=1,那么就会执行第二层中else代码块,又会遇到res = n*test(n-1),依然不会执行第二层中的return res。继续执行进入第三层递归,依此类推,直到进入第四层递归 此时的n=1那么就会执行if代码块内的代码return 1此时第四层函数结束,因为第四层递归是从在第三层代码里执行的,那么第四层得到的返回就是第三层的res,此时第三层的res的值已经得到,接下来就会执行return res,又因为第三层递归是在第二层函数代码块里执行的,那么第三层的返回值就是第二层的res......最终返回给第一层的res。最后返回test(4)的结果。

3.函数递归是函数式编程的基础,也是初学者容易卡壳的地方,本人图示方法解释函数的层次递归的方式,希望能给初学者朋友给点意见。