一、二分查找

二分查找也称之为折半查找,二分查找要求线性表(存储结构)必须采用顺序存储结构,而且表中元素顺序排列。

二分查找:

1.首先,将表中间位置的元素与被查找元素比较,如果两者相等,查找结束,否则利用中间位置将表分成前、后两个子表。

2.如果中间位置元素<被查找元素,则开始位置 = 中间位置,结束位置 = 表的长度-1

3.如果中间位置元素>被查找元素,则开始位置=0,结束位置=中间位置

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]

def func(l,aim,start= 0,end=None):
if end == None:end = len(l) - 1
if start <= end:
mid = (end + start) // 2 #12 18
if l[mid] < aim:
return func(l,aim,start = mid + 1,end = end) # [42,43,55,56,66,67,69,72,76,82,83,88]
elif l[mid] > aim:
return func(l,aim,start = start,end = mid - 1)
elif l[mid] == aim:
return mid
else:
return None
func(l,66)

二、斐波那契数列

斐波那契数列又称黄金分割数列,是指1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89... 。这个数列从第3项开始,每一项都得等于前两项的和。

1)比较占内存

def fib(n):
if n <= 1:
return 1
else:
return fib(n - 1) + fib(n - 2)

2)比较推荐

def fib(n,a=0,b=1):
if n == 1 or n == 2:
print(b)
return a + b
else:
print(b)
return fib(n-1,b,a+b)
#1 1 2 3 5 8 13
ret = fib(5)
print(ret)

三、三级菜单

1.遍历一级的key

2.根据输入判断是否key存在

3.如果key存在,递归再打印

4.如果输入是b,只是中断本次函数,返回上层函数

5.如果输入是q,不断的向上返回。

 area = {
'山东省':{'济南市':{'市中区','历下区','天桥区'},'青岛市':{'即墨市','胶州市','平度市'},'菏泽市':{'牡丹区','单县','曹县'}},
'河北省':{'石家庄市':{'高邑县','深泽县','新乐县'},'唐山市':{'乐亭县','迁西县','唐海县'},'秦皇岛市':{'昌黎县','抚宁县','卢龙县'}},
'广东省':{'广州市':{'南沙区','黄浦区','海珠区'},'深圳市':{'罗湖区','南山区','盐田区'},'珠海市':{'香洲区','斗门区','金湾区'}}
} def func(dic): while True:
for key in dic:
print(key)
content = input('>>>')
if content in dic and dic[content]:
ret = func(dic[content])
if ret == 'q':return ret
elif content == 'b' or content == 'q':
return content func(area)
print('之后的操作.....')

Python递归 — — 二分查找、斐波那契数列、三级菜单的更多相关文章

  1. Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

  2. 算法之路(三)----查找斐波纳契数列中第 N 个数

    算法题目 查找斐波纳契数列中第 N 个数. 所谓的斐波纳契数列是指: * 前2个数是 0 和 1 . * 第 i 个数是第 i-1 个数和第i-2 个数的和. 斐波纳契数列的前10个数字是: 0, 1 ...

  3. 算法 递归 迭代 动态规划 斐波那契数列 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. Python基础(二):斐波那契数列、模拟cp操作、生成8位随机密码

    一.斐波那契数列 目标: 编写fib.py脚本,主要要求如下: 输出具有10个数字的斐波那契数列 使用for循环和range函数完成 改进程序,要求用户输入一个数字,可以生成用户需要长度的斐波那契数列 ...

  5. Python3基础 函数 递归 阶乘与斐波那契数列

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. python基础练习题(斐波那契数列)

    day4 --------------------------------------------------------------- 实例006:斐波那契数列 题目 斐波那契数列. 题目没说清楚, ...

  7. python学习笔记之斐波拉契数列学习

    著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 如果用Python的列表生成式, ...

  8. Count and Say,统计并输出,利用递归,和斐波那契数列原理一样。

    问题描述:n=1,返回“1”:n=2,返回“11”:n=3,返回“21”:n=4,返回1211,.... 算法分析:和斐波那契数列道理差不多,都是后一个要依赖前一个元素.因此可以使用递归,也可以使用迭 ...

  9. 剑指offer 7. 递归和循环 斐波那契数列

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 简简单单 废话不多说,直接上代码: public class Sol ...

  10. python的生成器(斐波拉契数列(Fibonacci))

    代码: 函数版本: #斐波拉契数列(Fibonacci) def fib(max): n=0 a,b=0,1 while n < max: a,b = b,a+b n = n+1 return ...

随机推荐

  1. hdu3507 Print Article(斜率优化入门)(pascal)

    Problem Description Zero has an old printer that doesn't work well sometimes. As it is antique, he s ...

  2. 个人博客开发-01-nodeJs项目搭建

    // window系统下 1.nodeJs 安装 nodeJs 安装 看  这里 , 先下载再下一步下一步就OK了,我的是在C盘里安装的. 安装完以后 按 win + R ,在弹出的小框框里输入 CM ...

  3. 我为什么鼓励工程师写blog

    文/JoeyChen 工程师该怎样才能突破自己的能力瓶颈?写 blog! 工程师该怎样精进自己在职涯上所需要的能力?写 blog! 工程师该怎样才能保持学习与成长的动能?写 blog! 工程师该怎样才 ...

  4. 安装redis环境

    1 安装redis至 /home/www/redis目录下 [root@cuijian www]# tar zxf redis-2.8.13.tar.gz [root@cuijian www]# cd ...

  5. centos 6.5 web service模式 系统 安装php

    1 首先是坚持libxml2出问题,提示如下: checking for xml2-config path... /home/www/thirdlib/libxml2/bin/xml2-configc ...

  6. bzoj3251: 树上三角形(思维题)

    神tmWA了8发调了20min才发现输出没回车T T... 首先考虑一段什么样的序列才会是N... 显然最长的形式就是斐波那契,前两数之和等于第三数之和,这样就无法组成三角形并且序列最长.可以发现在i ...

  7. 解题:BZOJ 4808 马

    题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...

  8. Linux之选取信息命令介绍与应用20170331

    在介绍选取信息命令之前,说一下管道符“|”与tr命令,因为在使用多个命令一起的时候经常用到它. 一.利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入. ...

  9. oracle中建立job(任务)

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  10. selenium - webdriver - 定位一组元素

    八种方法: find_elements_by_id() find_elements_by_name() find_elements_by_class_name() find_elements_by_t ...