递归只是一种思想,没有什么高大尚的东西,只不过有时候理解起来不是这么好理解,对递归最好的理解就是自己调用自己,递归是对一些存在递归思想的思想,最经典的案例就是阶乘,递归就是把复杂重复的事情简化。
def factI(n):
result=1
while n>1:
result=result*n
n-=1
return result
#递归实现阶乘
def factR(n):
if n==1:
return n
else:
return n*factR(n-1)
#斐波那契数列
def fb(n):
if n==0 or n==1:
return 1
else:
return fb(n-1)+fb(n-2)
def testfb(n):
for i in range(n+1):
print('fib of',i,'=',fb(i))
testfb(3)
#递归回文
def isPal(s):
def tochars(s): #将传入的参数赋给letters
s=s.lower()
letters=''
for c in s:
if c in 'abcdefgnopqrstuvwsyzhijklm':
letters=letters+c
return letters
def isPal(s):
print('isPal called with',s)
if len(s)<=1:
print('About to return True from base case')
return True
else:
answer=s[0]==s[-1] and isPal(s[1:-1])
print('About to return ',answer,'for',s)
return answer
return isPal(tochars(s))
def testispal():
print('Try doGod')
print(isPal('doGgod'))#这传递的参数里面的函数通用
testispal()
#计算列表元素之和递归版
def countsum(lst):
if len(lst)==1:
return lst[0]
return lst[0] +countsum(lst[1:])
countsum([1,2,3,4,5,6,7,8,9])
序号为执行顺序
|