博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数的递归
阅读量:6377 次
发布时间:2019-06-23

本文共 1719 字,大约阅读时间需要 5 分钟。

1、什么是函数的递归

  函数的递归调用:一个函数运行中又间接调用的函数本身

  def foo():      print('from foo')      foo()

  这是一个死循环,但python为了防止内存吃不消,设置了默认最高递归次数1000次就会报错。

  递归必须要有两个明确的阶段:

    递推:一层一层递归调用下去,强调每进入下一层递归问题的规模都必须有所减少
    回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层一层回溯

  举个例子 :

    我问小明今年几岁,小明说:我比小王大2岁。让后我有接着问小王,小王说:我比小李大2岁。。。。(省略,算我偷懒吧)

    接着问3次之后小左说:我18岁。

      age(5) = age(4) + 2      age(4) = age(3) + 2      age(3) = age(2) + 2      age(2) = age(1) + 2      age(1) = 18

    我们不难发现这是在一环扣着一环知道小左说出自己的年龄才能回溯小明的年龄

      age (n) = age (n-1) + 2

      age (1) = 18

    这是上面的一个规律接下来我们运用下函数

  def age(n):      if n == 1:          return 18      return age(n-1) + 2  print(age(5))   》》26

2、为什么要用递归

  递归可以总结说是一个循环据我所学的知识只有一个while 条件 循环  虽然说 可以解决问题但是对于有些应用场景太过于复杂

    比如:l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]

    如果用while取得的就比较复杂,如果用递归的话就比较简单

    l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]    def foo (l):        for item in l:            if type(item) is list:                foo(item)            else:                print(item)    foo(l)

3、如何用递归

  除了以上的玩法 递归还有一个玩法 就是:二分法

  如果要一个列表非常多的数字,你要取出 一个,如果用for循环的话就会循环很久,

  

  这样也是一种解决方法。

  nums = [1, 3, 7, 11, 22, 34, 55, 78, 111, 115, 137, 149, 246, 371]  def search(search_num, nums):      if len(nums) == 0:#如果切分把列表里的值都没有的话,这个值就不在这里面          print('里面没有')          return       mid_index = len(nums) // 2#计算这个列表中间值      if search_num > nums[mid_index]:#判断输入的那个值是否大于中间值          nums = nums[mid_index + 1:]#如果大于就切开大于那边的区域ps:+1是中间那个值显然没必要去比了          search(search_num, nums)#继续上面的循环操作直到切出那个值      elif search_num < nums[mid_index]:          nums = nums[mid_index + 1:]          search(search_num, nums)      else:          print('找到了')  search(44, nums)

 

转载于:https://www.cnblogs.com/zuozhengjun/p/9183608.html

你可能感兴趣的文章
MyBatis(1)——快速入门
查看>>
Linux下安装Mysql
查看>>
openstack ocata版(脚本)计算节点安装
查看>>
JavaEE Tutorials (27) - Java EE的并发工具
查看>>
adb--monkey 压力测试工
查看>>
Socket编程详解
查看>>
Linux 技巧:让进程在后台可靠运行的几种方法
查看>>
WebView.简单使用_资料
查看>>
Natural Cycles避孕App精准计算受孕时间【APP推荐】
查看>>
解决IllegalStateException: Can not perform this action after onSaveInstanceState
查看>>
vdbench-自动化测试脚本
查看>>
CAN协议栈总体架构
查看>>
python下正则表达式的随笔记录
查看>>
Wp8程序加载运行顺序(菜鸟篇)
查看>>
小白的进阶之路13
查看>>
Socket,SocketImpl与SocketImplFactory的关系
查看>>
【微信开发】—7200s限制,非数据库
查看>>
I.MX6 GPS Android HAL Framework 调试
查看>>
if句型分析
查看>>
学习过程中的图形学知识补充用文档
查看>>