wskickahn 发表于 2015-11-29 11:12:22

python之路第五篇之递归(进阶篇:续:经典例子剖析)

def func1(arg1,arg2):     #arg1 = 0 ,arg2 = 1,第2次:arg1 = 1,arg2 = 1,第3次:arg1 = 1,arg2 = 2,
  第4次:arg1 = 2,arg2 = 3,
  
  if arg1 == 0:       #满足条件,开始执行
  #print arg1,arg2
  pass            #不做任何处理
  
  arg3 = arg1 + arg2#走到这一步,arg3 = 0 + 1 = 1,第2次:arg3 = 1 + 1 = 2,
  第3次,arg3 = 1 + 2 = 3,第4次:arg3 = 2 + 3 = 5, .... 执行到第18次....
  
  if arg3 > 1000:   #第一次循环不符合条件,绕开return arg3,而继续往下执行;....
  假设执行到第18次时符合条件,那么就会执行下面的代码,即 return arg3 会被执行!!!
  
  return arg3   
  #第一次循环不执行,2,3,4次都一样不执行;.....,假设第18次时符合条件,并且执行
  了return arg3,重点来了!!!!,这个时候我们都知道,函数体中,一个值被return,
  那么这个函数的生命周期也就结束,不再往下执行,也就意味着下面的func1(arg2,arg3)
  没有被执行.   
  
  func1(arg2,arg3)   
  #自身调用第2个和第3个的值,即第1次为:1 ,1第2次为1,2,第3次:2,3 第4次:3,5 ....
  假设执行到第18次,这个时候没有被执行,因为上面return的出现,函数生命周期已经结束
  (重点!!:分析:既然18次时符合条件,并且return arg3,函数直接出去了,大家不妨想想,
  那么在出去之前,它的上一次执行,也就是第17次并没有在func1(arg2,arg3)这一步,将这个
  函数的值return(返回)给func1(arg1,arg2),也就意味着,17次没有返回,而18次时,
  函数生命周期也已经结束!之后执行函数外面的操作,result = func1(arg1,arg2),print result,
  接着往下看:
  
  大家都知道,如果要将一个函数赋值给一个变量,假设这么赋值:result = func1(“值”,“值”),
  那么这个函数肯定会有一个返回值,同时赋值给这个变量,由于17次没有return func1(arg2,
  arg3)给func1(arg1,arg2),18次时函数结束,那么这个函数的默认返回值就是None(即空值)
  那么赋值给这个变量和打印这个变量也就是None
  
  同时大家记住一句话:python 函数默认是从上往下执行
  
  
  result = func1(0,1)#第一次开始执行,赋值!第18次赋值,这个时候是None
  print result         #第1,2,3,4都不执行,因为这个是在函数外,只有函数结束后才行,....
  第18次,这里打印了最终值"None"
页: [1]
查看完整版本: python之路第五篇之递归(进阶篇:续:经典例子剖析)