python学习之-函数的地递归

什么是函数的递归

在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用

递归的调用是有层级限制的。默认从0 -997

递归的用处

递归的本质就是循环,某些地方比循环方便,for循环取值方便,while循环是条件循环(受条件控制),而递归也是一个重复的过程,优势只需要把控住在满足什么条件的情况下把回溯结束掉,简单来说只要把控递归的结束条件

_________________

递归调用的基本形式

def foo():

  print('from foo')

  foo()

扫描二维码关注公众号,回复: 4229475 查看本文章

这就是递归的基本形态

__________________

函数递归必须满足两个条件:
1. 必须有一个明确的结束条件
2. 每进入下一层递归,问题的规模都应该有所减少

由上述两个条件可以推导出递归应该有两个明确的阶段:
1. 回溯: 一层一层地递归调用下去
2. 递推: 在某一层结束掉递归,开始往回一层层地返回

例:递归的概念

回溯的概念:问一个人的年龄,他说我比后面的大2岁,再次问后面的你几岁,他又说我比后面的大2岁,再去问他后面的,他说我比后面的大2岁,继续问后面告诉我18岁(拿到结果了这就是明确的结束条件)

递推:当第四个人告诉我18岁,那么我从第四个人开始往前加2岁,直到得出第一个人的年龄是24(就是往回一个一个的推结果)

这个一层一层往下调用就是回溯,满足一个结束条件后,一层一层往上返回的概念就是递推

函数递归的实例

def age(n):
  if n == 1:
    return 18
  return age(n-1) + 2

例:把列表中所有的值取出

list=[1,[2,[3,[4,[5,[6,[7,]]]]]]]

def func(l):
  for item in l:
    if type(item) is list:  #如果是列表
      func(item)  #返回自身
    else:  
    print(item) #不是列表则打印出来

func(list1)

PS:逻辑就是通过递归,判断如果是列表则返回自身回到函数开始层,然后进行for循环,不是列表就是打印

例:数字列表按照从小大的顺序排列
nums=[11,13,21,31,43,101,221,302,339,443]
find_num=444

for num in nums:
  if num == find_num:
    print('find it')
    break
  else:
    print('not exist')

函数递归的图示

猜你喜欢

转载自www.cnblogs.com/shizhengquan/p/10016934.html