是的,这一点老师写错了,但是推演到下一个写法的时候,这个错误就不重要了,因为中间阶段的写法本来就是过度的。
我觉得没什么毛病,编码就是一边探索一边debug的过程,如果一步就对反而没什么教学效果
我觉得可能是因为datas是一个数组,而取值是选取数组里面的数字。而直接写成=datas,next就不能按照顺序递归了
递归的性能是很低,因为会有大量重复计算的过程。但是可以提高性能。你把已经递归的值存放到字典里,需要用时取之。这样你输入1000都不会死机。
from collections import defaultdict total_dic = defaultdict(int) def fib(k): if k in [1, 2]: return 1 if k in total_dic: result = total_dic[k] else: result = fib(k-1) + fib(k-2) total_dic[k] = result return result print(fib(1000))
注意arranges.pop()或者说pop()这个函数只会弹出数组的最后一个元素,也就是说会去掉你选的(递归开始的地方)上一个元素。所以递归完成后不一定是空列表。比如[1,2,3] #1设置现场 arrange = [1,2] #2.递归 next_datas = [3], 这一步也就只有一个元素可选,直接一种可能[1,2,3] ,#3 恢复现场 arrange = [1],继续设置下一个现场为[1,3]....
这里return的目的是让函数返回不执行后续的逻辑,代码里面如果if和else后面都没有逻辑的话 可以不写。因为没有后续逻辑的代码可执行函数也会默认返回的
是的,这里是有问题。不过无伤大雅。
对的。
同求课件