函数递归与二分法

1.什么是函数递归

  函数的递归调用是函数嵌套调用的一种特殊形式,

  特殊在调用一个函数的过程中又直接或者间接地调用了该函数本身

  

  递归本质就是一个循环的过程,

    但是递归必须满足两个原则:

      1.每进入下一层递归,问题的规模必须有所减少

      2.递归必须有一个明确的结束条件或者说有一个明确的进入下一层递归的条件

    并且递归有两个明确的阶段

      1.回溯:一层一层地递归调用下去

      2.递推:在某一层结束掉递归,然后一层一层返回

 

2.为何要用递归:

  在某些情况下,基于递归来使用重复的过程比while循环更加简单

 

3.如何用

举例

def age(n):if n == 1:return 18return age(n-1)+2res=age(5)
print(res)========================================list1 = [1, [2, [3, [4, [5, [6, [7, [8, [9]]]]]]]]]def func(l):for i in l:if type(i) is list:func(i)else:print(i)func(list1)
View Code

 

# 二分法:二分法是算法的一种,算法是如何高效地解决问题的思路

nums = [1, 13, 15, 23, 27, 31, 33, 57, 73, 81, 93, 94, 97, 101]def binary_search(find_num, nums):print(nums)if len(nums) == 0:print('not exists')returnmid_index = len(nums) // 2if find_num > nums[mid_index]:nums = nums[mid_index + 1:]binary_search(find_num, nums)elif find_num < nums[mid_index]:nums = nums[:mid_index]binary_search(find_num, nums)else:print('find it')binary_search(81, nums)
View Code

 

转载于:https://www.cnblogs.com/xiamenghan/p/9768698.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Oracle WebLogic创建部署计划

创建部署计划 部署计划是JSR-88部署标准的一部分&#xff0c;尽管在该标准中未明确说明。 部署计划是一个XML文档&#xff0c;用于定义自定义WebLogic Server部署环境。 此配置可用于覆盖在应用程序归档文件中定义的特定设置。 有许多原因可能导致您不希望修改应用程序存档的原…

记录一个前端架构的想法

前端&#xff0c;真的是让我哭笑不得的职业&#xff0c;从几年前作为打酱油的理想职业到现在的热门职业&#xff0c;无疑在这个过程中&#xff0c;门槛变高了&#xff0c;而且还是非常高。一大堆的框架和库&#xff0c;像什么vue啦、react啦、angular啦、webpack啦等等等等。让…

java文件解压文件_java 文件解压缩

直接上代码&#xff1a;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.I…

JAVA 遍历Map对象

方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。 Map<Integer, Integer> map new HashMap<Integer, Integer>(); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("Key " …

sol - 0x60,61,62

[例题]走廊泼水节 设当前扫描到边x,y&#xff0c;长度为z&#xff0c;x所处的并查集为Sx&#xff0c;y所处的并查集为Sy&#xff1b; 对于任意u属于Sx&#xff0c;v属于Sy&#xff0c;我们可以知道u&#xff0c;v之间必连一条边 但是我们要在保证x,y之间的边属于唯一最小生成树…

将Spring Bean注入非托管对象

依赖注入带来的好处可能会上瘾。 使用注入配置应用程序结构比手动完成所有解析要容易得多。 当我们有一些在容器外部实例化的非托管类时&#xff0c;例如在Vaadin UI组件或JPA实体等其他框架中&#xff0c;它们是很难被退出的。 当我们使用域驱动设计时&#xff0c;后者尤其重要…

java 编程原理_Java网络编程 -- 网络编程基础原理

Hello&#xff0c;今天记录下 Java网络编程 --> 网络编程基础原理。一起学习&#xff0c;一起进步。继续沉淀&#xff0c;慢慢强大。希望这文章对您有帮助。若有写的不好的地方&#xff0c;欢迎评论给建议哈&#xff01;初写博客不久&#xff0c;我是杨展浩。这是我的第十五…

JavaScript基础之--- 深拷贝与浅拷贝

理解深拷贝和浅拷贝之前&#xff0c;先来看一下JavaScript的数据类型。 1、基本类型和引用类型 //案例1 var num1 1, num2 num1; console.log(num1) //1 console.log(num2) //1 num2 2; //修改num2 console.log(num1) //1 console.log(num2) //2 //案例2 var obj1 {x: 1, …

vue菜鸟从业记:完成项目最后一公里之真机测试和打包上线

最近我朋友王小闰他们公司的项目开发已经进入收尾阶段&#xff0c;前后端并行开发的差不多了&#xff0c;联调也调过了&#xff0c;上篇文章里也讲到了&#xff0c;所谓联调&#xff0c;就仿佛在说“我也不知道我的接口文档写的对不对&#xff0c;我们验证一下吧&#xff1f;我…

血淋淋的事实告诉你:你为什么不应该在JS文件中保存敏感信息

在JavaScript文件中存储敏感数据&#xff0c;不仅是一种错误的实践方式&#xff0c;而且还是一种非常危险的行为&#xff0c;长期以来大家都知道这一点。 而原因也非常简单&#xff0c;我们可以假设你为你的用户动态生成了一个包含API密钥的JavaScript文件&#xff1a; apiCall…

使用Infinispan进行Camel的事务性缓存

不久前&#xff0c;我为Camel 创建了Redis连接器。 Redis是很棒的键值存储&#xff08;还有更多&#xff09;&#xff0c;但是随后我需要一个在与Camel相同的JVM中运行的缓存&#xff0c;并注意到Infinispan已切换到ASL v2 。 Camel中已经有其他用于在JVM上进行缓存的连接器&am…

“景驰科技杯”2018年华南理工大学程序设计竞赛 A. 欧洲爆破(思维+期望+状压DP)...

题目链接&#xff1a;https://www.nowcoder.com/acm/contest/94/A 题意&#xff1a;在一个二维平面上有 n 个炸弹&#xff0c;每个炸弹有一个坐标和爆炸半径&#xff0c;引爆它之后在其半径范围内的炸弹也会爆炸&#xff0c;每个炸弹最多爆炸一次&#xff0c;每次随机选一个未引…

java 日期是否合法_检测日期字符串是否为合法(java版)

1 /**2 * 检测日期字符串是否为合法3 *paramdateStr4 *paramformat5 *return6 */7 public static final boolean checkDateFormat(String dateStr,String format) throwsNumberFormatException{8 if(dateStr null || "".equals(dateStr) ) return false;9 if(dateSt…

从零开始搭建一个vue.js的脚手架

在谷歌工作的时候&#xff0c;我们要做很多界面的原型&#xff0c;要求快速上手&#xff0c;灵活运用&#xff0c;当时用的一些现有框架&#xff0c;比如angular&#xff0c;太笨重了——尤雨溪&#xff08;Vue.js 作者&#xff09; vue.js是现在一个很火的前端框架&#xff0c…

更安全的Web通信HTTPS

1. HTTP协议存在的问题 阅读本篇需要对HTTP协议有最基本的了解。 借用《图解密码技术》里的图片&#xff0c;我们以如下一个购物场景开始介绍&#xff1a; 在网购过程中&#xff0c;如果使用纯粹的HTTP协议&#xff0c;那么用户的账号密码&#xff0c;信用卡&#xff0c;银行卡…

Java中的Memento设计模式-示例教程

记忆模式是行为设计模式之一 。 当我们要保存对象的状态以便以后可以恢复时&#xff0c;可以使用Memento设计模式。 记忆模式用于以这种方式实现该目的&#xff0c;即在对象外部无法访问该对象的已保存状态数据&#xff0c;从而保护了已保存状态数据的完整性。 Memento模式通过…

CSS入门指南——页面的水平居中

我们经常看到这样的网页&#xff0c;即内容水平居中在屏幕中间&#xff0c;左右留白。我们来给这样的布局起个名字——水平居中布局 其实要实现这样的布局十分简单&#xff0c;即给中间部分一个宽度&#xff0c;设置margin左右值为auto,如&#xff0c;中间部分class"main&…

python控制台执行代码字符串_编写Python脚本以使用控制台命令执行

研究是在底部&#xff0c;阅读之前。。。谢谢。在我必须编写一个运行SQL查询的Python脚本。我创建了一个主类&#xff0c;名为SQLQuery。每个SQLQuery实例表示一个查询。脚本的结构必须如下所示&#xff1a;class SQLQuery(object):def __init___(self, string_myQuery)...inst…

Linux Tools Quick Tutorial 学习记录

总体 书籍链接 find命令 查找大于多少的文件 find / -type f -size 5M | xargs ls -lh | awk {print $5, $9} | ls -lrt

mysql explain的使用

一、explain返回各列的含义&#xff1a; 1、table&#xff1a;显示这一行的数据是关于那张表的 2、type&#xff1a;重要的列&#xff0c;显示连接使用了何种类型&#xff0c;从最好到最差的连接类型为const、eq_reg、ref、range、index、ALL 3、possible_keys&#xff1a;显示…