递归:

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

1. 必须有一个明确的结束条件;

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

age(5)=age(4)+2

age(4)=age(3)+2

age(3)=age(2)+2

age(2)=age(1)+2

age(1)=10

n==1 age(n)=10

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

递归方法实现

def age(n):

if n==1:

return 10

else:

return age(n-1)+2

print(age(5))

---->18

递归函数格式

def func(n):

if n == 10:

return

print('from func')

func(n-1)

func(10)

递归效率低,python3中栈默认次数为1000次,可以设栈的次数

import sys

sys.setrecursionlimit(10000)

递归函数应用

用二分法查看整型在不在data列表中

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

程序如下

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def search(num,data):

print(data)

mid_index=int(len(data)/2)

mid_value=data[mid_index]

if num>mid_value: #num在data中值右侧

data=data[mid_index:]

return search(num,data)

elif num

data=data[:mid_index]

return search(num, data)

else:

print("find it!")

search(35,data)

--->[1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

[18, 20, 21, 22, 23, 30, 32, 33, 35]

[23, 30, 32, 33, 35]

[32, 33, 35]

[33, 35]

find it!

search(3,data)

--->[1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

[1, 3, 6, 7, 9, 12, 14, 16, 17]

[1, 3, 6, 7]

[1, 3]

find it!

search(19,data)

---->报错,一直在寻找19,查了1000次后栈满,所以报错

程序优化版

data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

def search(num,data):

print(data)

if len(data) > 1:

mid_index=int(len(data)/2)

mid_value=data[mid_index]

if num>mid_value: #num在data中值右侧

data=data[mid_index:]

return search(num,data)

elif num

data=data[:mid_index]

return search(num, data)

else:

print("find it!")

else:

if data[0]==num:

print("find it!")

else:

print(num,"不在data列表中")

search(19,data)

---->[1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]

[18, 20, 21, 22, 23, 30, 32, 33, 35]

[18, 20, 21, 22]

[18, 20]

[18]

19 不在data列表中

函数式编程:

1.不会修改外部状态

2.函数式编程语言非常精简,可读性比较差

3.模仿数学意义上的函数编程

高阶函数:map , reduce ,filter,sorted

能把函数作为参数传入,这样的函数就称为高阶函数。

匿名函数: lambda

面向过程编程:我们通过把大段代码拆成函数,通过一层一层的函数,可以把复杂的任务分解成简单的任务,这种一步一步的分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。

函数式编程:是使用一系列函数去解决问题,函数式编程就是根据编程的范式来,得出想要的结果,只要是输入时确定的,输出就是确定的。

递归函数合式分解python_python(22)- 递归和函数式编程相关推荐

  1. 递归函数合式分解python_学习python的day10之递归与内置函数

    一.递归 递归的特点: 函数内部自己调用自己 必须出口 需求:求3以内的累加和 defsum(a):if a == 1:return 1 return a+sum(a-1) result= sum(3 ...

  2. 递归函数合式分解python_零基础学python-18.2 递归函数与分解递归函数的执行步骤

    这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数 递归函数:函数Func(Type a,--)直接或间接调用函数本身,则该函数称为递归函数 我下面以递归求和为例子: >& ...

  3. java1.8 流式计算:利用接口的函数式编程 + 链式编程

    java1.8 流式计算:利用接口的函数式编程 + 链式编程 文章目录 java1.8 流式计算:利用接口的函数式编程 + 链式编程 1.流式计算 1)ArrayList和Stream关联的底层解析( ...

  4. java8/Stream流式计算从入门到精通/函数式编程实战

    摘要:Stream流式计算,本文讲解了Stream流式计算的概念,具体的使用步骤以及源码实现,最后讲解了使用Stream过程中需要注意的事项.Stream在公司项目中被频繁使用,在性能优化上具有广泛的 ...

  5. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  6. Python使用递归法和函数式编程计算整数各位之和

    问题描述:给定一个正整数,计算其各位数字之和. 参考代码: 程序运行无任何输出,表示两个函数结果一致. ----------相关阅读---------- 1900页Python系列PPT分享一:基础知 ...

  7. 【C#本质论 十一】合式类型(二)程序集引用、XML注释、垃圾回收和资源清理

    上一节介绍到了如何进行Object方法重写和操作符重载,本篇博客来接着介绍合式类型剩余的内容: 程序集引用及命名空间定义 其中一些相对简单的内容就不进行过多的介绍了,例如引用其他程序集,只需要注意三种 ...

  8. 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )

    文章目录 一.借助 递归函数操作 逆序打印字符串 二.完整代码示例 一.借助 递归函数操作 逆序打印字符串 递归需要掌握下面 222 个点 : 参数入栈模型 : 第 111 次 , "sdh ...

  9. 二叉树的链式结构的非递归遍历

    二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1.    Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...

最新文章

  1. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY10-降维和度量学习
  2. poj1192 最优连通子集(树形dp)
  3. 全球首个无人驾驶政策颁布,各大巨头并不完全买账
  4. linux+bbu电池模块,服务器Raid卡电池自动充电
  5. SAP BTP 平台 CloudFoundry 环境入门级别的介绍
  6. C语言计算一个数的平方根立方根,怎样快速计算出一个数的平方根立方根?
  7. php代码质量怎么提高,如何提高PHP代码的质量?第一部分 自动化工具
  8. bottomTagFragment
  9. linux中删除文件命令
  10. spss数据预处理步骤_5个步骤,用SPSS进行数据分析
  11. 聚类分析方法的研究与应用综述
  12. RocketMQ 内存优化
  13. u盘iso安装服务器系统怎么安装win7系统安装方法,u盘iso安装系统,小猪教您u盘怎么安装win7系统...
  14. 2014年禁毒工作总结,2015年工作打算
  15. 纯前端导出export,复杂表格表头合并,表头数据部分动态,
  16. 应用程序迁移,电脑c盘满了怎么转移到d盘?
  17. Java开发环境与搭建
  18. TensorRT文档翻译
  19. 要闻君说:印度公司要在京沪建立数据中心;超 10 万个 GitHub 仓库可泄漏 API 令牌及密钥...
  20. Flutter 手势篇

热门文章

  1. 【树莓派】树莓派3B安装宝塔面板并配置安装LNMP
  2. javaweb解决编码问题_学习编码? 首先,学会解决问题。
  3. --eval mongo_这就是为什么您的read-eval-print-loop如此惊人的原因
  4. vue-jest测试用例_用Jest快速介绍测试驱动的开发
  5. 比特币未来几个月怎么样_您需要了解的关于比特币技术的未来
  6. python实现注册登录检验系统的源代码_Django自带的用户验证系统实现
  7. 用 Python 下载抖音无水印视频
  8. 2014中国软件开发者调查
  9. Visual Studio 2008中的jQuery Intellisense
  10. 【opencv学习】【模板匹配】