前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >递归与二分法

递归与二分法

作者头像
py3study
发布2020-01-20 17:54:03
4230
发布2020-01-20 17:54:03
举报
文章被收录于专栏:python3python3

递归

自己调用自己

递归的入口(参数)和出口(return)

树状结构的遍历

代码语言:javascript
复制
import os
def func(lujing, n): # "d:/a/"
    lst = os.listdir(lujing) # 打开文件夹. 列出该文件夹内的所有文件名
    for el in lst: # el是文件的名字.  b, c
        path = os.path.join(lujing, el)  #  还原文件路径"d:/a/b"
        if os.path.isdir(path): # 判断路径是否是文件夹
            print("..." * n,el) # 显示文件夹的名字
            func(path, n + 1)  # 在来一次 
        else:
            print("\t" * n,el) # 显示文件
func("d:/a", 0)

二分法

掐头结尾取中间

查找效率非常的高

不使用递归进行二分法

代码语言:javascript
复制
lst = [1,3,5,7,12,36,68,79,132,345,567]
n = int(input("请输入一个数"))
left = 0
right = len(lst) - 1
while left <= right:
    mid = (left + right)//2
    if n > lst[mid]:
        left = mid + 1
    elif n < lst[mid]:
        right = mid - 1
    else:
        print("存在")
        break
else:
    print("不存在")

用递归进行二分法的两种方法

1)第一种

代码语言:javascript
复制
def func(n, lst):
    left = 0
    right = len(lst) - 1
    if lst != []:
        mid = (left + right)//2
        if n > lst[mid]:
            func(n, lst[mid+1:]) # 改变列表
        elif n < lst[mid]:
            func(n, lst[:mid])
        else:
            print("找到了")
            return
    else:
        print("没找到")
        return

n = int(input("请输入你要查找的数:"))
func(n, [1,3,5,7,12,36,54,68,79,85,92,106]) 

2)第二种

代码语言:javascript
复制
def func(n, lst, left, right): 
    if left <= right:
        mid = (left + right) // 2
        if n > lst[mid]:
            left = mid + 1
            return func(n, lst, left, right)
        elif n < lst[mid]:
            right = mid - 1
            return func(n, lst, left, right) # 递归如果有返回值. 所有调用递归的地方必须写return
        else:
            print("找到了")
            return mid  # 返回上一个调用函数的值
    else:
        print("找不到")
        return False
n = int(input("请输入你要查找的数:"))
lst = lst = [1,3,5,7,12,36,68,79,125,343,485,875,1948]
ret = func(n, lst, 0, len(lst)-1) 
print(ret)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档