起初并不知道递归到底是个什么概念,为了方便理解,我放张动图在这里。
理解是什么之后,就先写了一个求阶乘的一个代码。
#!/usr/bin/python3
sumnum=1
def fun(num):
global sumnum
sumnum=sumnum*num
num=num-1
if num==1:
return sumnum
else:
return fun(num)
n=int(input('input a number:'))
print(fun(n))
我有个朋友也是这样写的,但是它的问题就在于调用fun()函数时,没有写return,导致了最后输出的结果是None。我自己看了看Python里函数的return的应用,再自己试了一试就发现了问题所在。
首先Python里函数如果不写return的值时,是会返回一个NoneType类型的None值,接着就是问题所在了,写了return后,就表示本次函数调用已经结束,就会一层层的运算,然后每次运算完把值返回给下一次函数调用,当条件满足时,结束函数调用,返回最后结果。
但是如果不写return的话,是会有运算结果的,但是一次次的调用,就像是俄罗斯套娃那种一样,前面的函数调用并没有结束,所以最后一次return的是sumnum,然后再往上一次返回时,返回的是None,后面依此类推,最后返回的值是None。
以后在写函数,调用函数时,一定要注意返回值的用法。