递归
如果一个函数在内部调用自身本身,这个函数就是递归函数。
条件:必须要有收敛条件和递归公式。
特性:1.必须有一个明确的结束条件。
2.每次进入更深一层递归时,问题规模相比赏析递归都应有所减少。
3.递归效率不高,递归层次过多会导致栈溢出(递归最大999层)。
一切用递归实现的功能都可以用循环实现,但有些时候递归函数更易读
def calc(n):
print(n)
if int(n/2)>0: #收敛条件
return calc(int(n/2)) #递归公式
calc(10)
递归的基本概念:程序调用自身的编程技巧称为递归,是函数自己调用自己。一个函数再其定义中直接或间接调用自身的一种方法,他通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量。递归的能力在于用有限的语句来定义对象的无限集合。
迭代
重复运行一段代码语句块的能力。目的通常是为了逼近所需目标或结果。每次对过程的重复称为一次'迭代'(循环),迭代会根据上次循环的结果调整本次结果。而每一次迭代得到的结果会作为下一次迭代的初始值。
递归和循环都可以实现迭代,但都要重复运行一段代码语句,就是迭代。
递归函数实现
def count(n):
if n >0:
print(n)
count(n-1)
else:
print('over!') count(10) >>>3 >>>2 >>>1 >>>over!
定义一个函数conut,每打印一个数字,这个函数就会重复运行一次,也就是迭代一次。
循环实现(for循环和while循环)
for i in range(10,0,-1):
print(i)
n = 10
while n>0:
print(n)
n-=1
迭代利用变量的原值推算出限量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。不论是for还是while,执行流程都会执行玩语句体,之后再从语句体的最开头循环执行,,每执行一次也称为迭代一次。
总结:
递归中一定有迭代 ,但是迭代中不一定有递归,大部分可以相互转换,能用迭代的不用递归,递归调用函数,浪费空间,并且递归容易造成栈的溢出。
遍历
所谓遍历,是指沿着某条搜索路线,依次对数据中的每个对象做一次且仅做一次执行动作。
list = ['a','b','c']
for i in list:
print(i)
从实现代码可以用看出,这次遍历时候通过for循环来实现的,与也就是迭代来实现的。
当然也可以不通过迭代来实现,一个以一个按照下标打印出来,也能遍历,不过效率太低。
总结:遍历是目的,迭代是手段。