5.4.递归 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 1     def calc(n) : 2          print(n) 3          if int(n/2) ==0: 4                return n 5           return calc(int(n/2) ) 6 7     calc(10) 8 9     输出: 10     10 11     5 12     2 13     1 递归特性: 1.必须有一个明确的结束条件 2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 3.递归效率不高, 递归层次过多会导致栈溢出(在计算机中, 函数调用是通过栈(stack) 这种数据结构实现 的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限 的,所以,递归调用的次数过多,会导致栈溢出) 1-1def calc(n):    print(n)    return calc(n/2)# 返回的时候,调用自己,自己又执行了,如果 return 的是 n; 就会变成死循环# 就像贪吃蛇一样,我吃我自己1-1-1def calc(n):    print(n)    return calc(n)calc(10)--->RecursionError: maximum recursion depth exceeded while calling a Python object1-1-2def calc(n):    print(n)    return calc(n+1)calc(0)--->从结果来看,最大的递归数是 999;这是程序的保护机制比如两个镜子对着照,进入无限循环,外面的函数还没有结束,导致内存很快耗光所以,递归的第一个特性就是必须有一个明确的结束条件 2-1def calc(n):    print(n)    if n/2 > 0:        return calc(n/2)calc(10)# 为什么无法结束?因为有小数,所以永远无法结束,需要将它变为整数2-1-1def calc(n):    print(n)    if int(n/2) > 0:        return calc(int(n/2))calc(10)--->105212-1-2def calc(n):    print(n)    if int(n/2) > 0:        return calc(int(n/2))    print("-->",n)calc(10)--->10521--> 1做递归,最好的办法就是加断点调试

更多相关文章

  1. 20210108 装饰器详解
  2. 20210111 装饰器之案例剖析
  3. JavaScript基础之 变量与常量的声明、函数 箭头函数
  4. 0331作业
  5. 如何在 Apache Hive 中解析 Json 数组
  6. javascript基础(一)
  7. js基础:变量与常量的声明以及函数知识
  8. 20201203 装饰器之高阶函数
  9. python3函数中lambda/filter/map/reduce的用法

随机推荐

  1. android 获取Gps信息的程序源码
  2. Android 使用 TableLayout 布局拉伸宽度
  3. Apple 再挑起戰火,控告 Samsung 15款 Andr
  4. Android撸一个转盘抽奖
  5. android 中隐藏EditText的下划线方法
  6. android:configChanges属性
  7. Android 线程超时的例子
  8. Tips: compilation and creating new pro
  9. Android应用在未启动的情况下无法收到指
  10. 一个现有Android工程作为组件加入到另一