Python-递归函数

今日内容:(递归函数)

递归函数也就是面向函数编程,别人都说,“人理解循环,神理解递归”,从这句话中,我们能看的出来,递归说简单也简单,说难也难。

就看我们自己怎么去理解了,学好了,我们就是神了,(哈哈,开个玩笑)!

在Python中的递归是有最大深度的,大概限制在997/998,但是我们可以用一些方法来改变它。例如:

import sys   # python 限制在997/998
sys.setrecursionlimit(100000)  
COUNT = 0
def func():
      global COUNT
      COUNT += 1
      print(COUNT)
      func()
func()

什么是递归?

  recursion 递归
  一个函数在内部调用自己
  递归的层数在Python里是有限制的
写递归函数必须要有一个结束条件
解耦:要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数分离
   1.增强代码的重用性
   2.减少代码变更的相互影响
def age(n):
      if n == 4:
            return 40
      return age(n+1)+2
print(age(1))
# 求结乘 n = 7*6*5*4*3*2*1
def func(n):
      if n == 1:
            return 1
      else:
            return n*func(n-1)
ret = func(7)
print(ret)
n = 7
#二分查找
def search(num,l,start=None,end=None):
      start = start if start else 0
      end = end if end else len(l) - 1
      mid = (end - start)//2 + start
      if start > end:
            return None
      elif l[mid] > num:
            return search(num,l,start,mid-1)
      elif l[mid] < num:
            return search(num,l,mid+1,end)
      elif l[mid] == num:
            return mid

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
print(search(66,l))
面试真题:
# 有⼀个数据结构如下所示,请编写⼀个函数从该结构数据中返回由指定的字段和对应的值组成的字典。如果指定字段不存在,则跳过该字段。
data={"time":"2016-08-05T13:13:05",
    "some_id":"ID1234",
    "grp1":{ "fld1":1,"fld2":2},
    "xxx2":{ "fld3":0,"fld5":0.4},
    "fld6":11,
    "fld7":7,
    "fld46":8}
#fields:由"|"连接的以"fld"开头的字符串,如:fld2|fld3|fld7|fld19

def select(data,fields):
    result = {}
    field_lst = fields.split('|')
    for key in data:
        if key in field_lst:
            result[key] = data[key]
        elif type(data[key]) == dict:
            res = select(data[key],fields)
            result.update(res)
    return result

fields = 'fld2|fld3|fld7|fld19'
ret = select(data,fields)
print(ret)

 
posted @ 2017-09-07 15:02  程先生_Python  阅读(160)  评论(0)    收藏  举报