python 数据结构 理解迭代与递归 递归的实例 栈帧 函数调用
2021-05-01 04:26
标签:pytho inf src factorial python nbsp bcd ever mat 运行情况: python 数据结构 理解迭代与递归 递归的实例 栈帧 函数调用 标签:pytho inf src factorial python nbsp bcd ever mat 原文地址:https://www.cnblogs.com/liuchaodada/p/13220955.html# 递归的三个条件
# 基本结束条件
# 向基本结束条件演进
# 调用自身
# 理解递归
# 递归就是把大问题一步步不断的化解为小问题,小问题解决后在一步步依赖回去解决大问题。
# (1+3+5+7+9)
# -> (1+(3+5+7+9))
# ->(1+(3+(5+7+9)))
# ->(1+(3+(5+(7+9))))
# ->(1+(3+(5+(7+(9))))
# (1+(3+(5+(7+(9)))) # if len(num_list)== 1
# (1+(3+(5+(16))))# (1+(3+(21)))# (1+(24))# (25)
# 迭代与递归求和对比
def list_sum1(num_list):
result = 0
for i in num_list:
result += i
return result
def list_sum2(num_list):
if len(num_list) == 1:
return num_list[0]
else:
return num_list[0] + list_sum2(num_list[1:])
# 四种求阶乘
# 迭代 reduce+lambda math 递归
def fact1(num):
while num is not None:
if num 0:
return False
elif num == 0:
return 1
else:
count = 1
for i in range(1, num+1):
count *= i
return count
from functools import reduce
def fact2(num):
while num is not None:
if num 0:
return False
elif num == 0:
return 1
else:
return reduce(lambda x,y:x*y,range(1,num+1))
def fact3(num):
import math
while num is not None:
return math.factorial(num)
def fact4(num):
if num == 0:
return 1
else:
return num * fact4(num-1)
print(fact4(5))
# 递归的实例
# int 转 str 整数转任意进制的字符串
# 基本结束条件 直到 n/base 整除后的n值小于进制数
# 向基本结束条件演进 每当 n/base
# 调用自身 每次 n 变成 n/base
def int_to_str(n, base):
convert_string = ‘0123456789ABCDEF‘
if n base:
return convert_string[int(n)]
else:
return int_to_str(n/base, base)+convert_string[int(n%base)]
print(int_to_str(1453, 16))
# 字符串逆序
# 结束 字符串为空
# 演进 每调用一次,开头的字符就加到后面一次,字符串就少头部一个
# 调用 调用自身,将每次的字符串分为 开头第一个字符在最后,余下的在前面
def reverse_str(aString):
if aString == ‘‘:
return aString
else:
return reverse_str(aString[1:])+aString[0]
print(reverse_str(‘hello‘))
# 判断回文词
def palchecker(aString):
import string
aString = aString.translate(str.maketrans(‘‘,‘‘, string.punctuation)).replace(‘ ‘,‘‘)
print(aString)
if len(aString) :
return True
elif aString[0] != aString[-1]:
return False
return palchecker(aString[1:-1])
print(palchecker(‘radm i,m dar‘))
# 递归的内部实现 栈帧 fp sp
# python默认深度998 最大深度3800 sys.setrecursionlimit()
# print(fact4(1000)) RecursionError: maximum recursion depth exceeded in comparison
# 栈帧空间就是运行函数的,
# 调用函数就是开辟一个新的栈帧空间,
# 调用结束后会自动释放栈帧空间
# 函数调用过程
# 去的过程:
# 没调用一个函数就开辟一块新的栈帧空间,
# 每结束一个变量, 就释放一个栈帧空间
# 递归本质上就是开辟和释放栈帧空间的过程
# 回的过程: 需要触底反弹
# 1.当前这层栈帧空间的代码全部执行完毕,
# 会自动回到上一层函数的调用处
# 2.当前函数遇到return会终止当前函数
# 回到上一层函数的调用处
def digui(n):
print(n)
if n > 0:
digui(n-1)
print(n)
digui(5)
# 代码从上到下执行:
# digui(5)
# print 5
# digui(4)
# print 4
# digui(3)
# print 3
# digui(2)
# print 2
# digui(1)
# print 1
# digui(0)
# print 0
# n !> 0
# print 0
# 最内层的函数已经结束
# 开始向外面跳转
# print 1
# print 2
# print 3
# print4
# prin 5
下一篇:一.JavaScript
文章标题:python 数据结构 理解迭代与递归 递归的实例 栈帧 函数调用
文章链接:http://soscw.com/index.php/essay/80696.html