递归函数合式分解python_python(22)- 递归和函数式编程
递归:
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
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)- 递归和函数式编程相关推荐
- 递归函数合式分解python_学习python的day10之递归与内置函数
一.递归 递归的特点: 函数内部自己调用自己 必须出口 需求:求3以内的累加和 defsum(a):if a == 1:return 1 return a+sum(a-1) result= sum(3 ...
- 递归函数合式分解python_零基础学python-18.2 递归函数与分解递归函数的执行步骤
这一章节我们来讨论一下递归函数,一个经常避免使用的,但又不得不学会的函数 递归函数:函数Func(Type a,--)直接或间接调用函数本身,则该函数称为递归函数 我下面以递归求和为例子: >& ...
- java1.8 流式计算:利用接口的函数式编程 + 链式编程
java1.8 流式计算:利用接口的函数式编程 + 链式编程 文章目录 java1.8 流式计算:利用接口的函数式编程 + 链式编程 1.流式计算 1)ArrayList和Stream关联的底层解析( ...
- java8/Stream流式计算从入门到精通/函数式编程实战
摘要:Stream流式计算,本文讲解了Stream流式计算的概念,具体的使用步骤以及源码实现,最后讲解了使用Stream过程中需要注意的事项.Stream在公司项目中被频繁使用,在性能优化上具有广泛的 ...
- python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数
1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...
- Python使用递归法和函数式编程计算整数各位之和
问题描述:给定一个正整数,计算其各位数字之和. 参考代码: 程序运行无任何输出,表示两个函数结果一致. ----------相关阅读---------- 1900页Python系列PPT分享一:基础知 ...
- 【C#本质论 十一】合式类型(二)程序集引用、XML注释、垃圾回收和资源清理
上一节介绍到了如何进行Object方法重写和操作符重载,本篇博客来接着介绍合式类型剩余的内容: 程序集引用及命名空间定义 其中一些相对简单的内容就不进行过多的介绍了,例如引用其他程序集,只需要注意三种 ...
- 【C 语言】字符串模型 ( 字符串翻转模型 | 借助 递归函数操作 逆序打印字符串 | 递归要素 | 递归停止条件 | 递归操作 )
文章目录 一.借助 递归函数操作 逆序打印字符串 二.完整代码示例 一.借助 递归函数操作 逆序打印字符串 递归需要掌握下面 222 个点 : 参数入栈模型 : 第 111 次 , "sdh ...
- 二叉树的链式结构的非递归遍历
二叉树的链式结构的非递归遍历 一. 非递归前序遍历和非递归中序遍历 1. Stack.h #ifndef__STACK_H__ #define__STACK_H__ #include<st ...
最新文章
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY10-降维和度量学习
- poj1192 最优连通子集(树形dp)
- 全球首个无人驾驶政策颁布,各大巨头并不完全买账
- linux+bbu电池模块,服务器Raid卡电池自动充电
- SAP BTP 平台 CloudFoundry 环境入门级别的介绍
- C语言计算一个数的平方根立方根,怎样快速计算出一个数的平方根立方根?
- php代码质量怎么提高,如何提高PHP代码的质量?第一部分 自动化工具
- bottomTagFragment
- linux中删除文件命令
- spss数据预处理步骤_5个步骤,用SPSS进行数据分析
- 聚类分析方法的研究与应用综述
- RocketMQ 内存优化
- u盘iso安装服务器系统怎么安装win7系统安装方法,u盘iso安装系统,小猪教您u盘怎么安装win7系统...
- 2014年禁毒工作总结,2015年工作打算
- 纯前端导出export,复杂表格表头合并,表头数据部分动态,
- 应用程序迁移,电脑c盘满了怎么转移到d盘?
- Java开发环境与搭建
- TensorRT文档翻译
- 要闻君说:印度公司要在京沪建立数据中心;超 10 万个 GitHub 仓库可泄漏 API 令牌及密钥...
- Flutter 手势篇
热门文章
- 【树莓派】树莓派3B安装宝塔面板并配置安装LNMP
- javaweb解决编码问题_学习编码? 首先,学会解决问题。
- --eval mongo_这就是为什么您的read-eval-print-loop如此惊人的原因
- vue-jest测试用例_用Jest快速介绍测试驱动的开发
- 比特币未来几个月怎么样_您需要了解的关于比特币技术的未来
- python实现注册登录检验系统的源代码_Django自带的用户验证系统实现
- 用 Python 下载抖音无水印视频
- 2014中国软件开发者调查
- Visual Studio 2008中的jQuery Intellisense
- 【opencv学习】【模板匹配】