IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> luliyu-python-day13 -> 正文阅读

[Python知识库]luliyu-python-day13

递归

# 递归函数: 函数内部自己调用自己
# 找到组成的基本事件
# 编写递归的终止条件
# 累加和
def f(n):
    if n == 1:
        return 1
    return f(n-1) + n
# f(5) =  f(4) + 5
# f(4) =  f(3) + 4
# f(3) =  f(2) + 3
# f(2) =  f(1) + 2
# f(1) = 1
print(f(5))
print(f(100))
def jieche(n):
    if n == 1:
        return 1
    return jieche(n-1)* n
print(jieche(5))
# 斐波那契数列第n项
# 1, 1, 2, 3, 5, 8, 13
def fibo(n):
    if n in [1, 2]:
        return 1
    return fibo(n-1) + fibo(n-2)
# RecursionError: maximum recursion depth exceeded
print(fibo(6))
print(fibo(7))

数组的和

# 求数组的和
from random import randint
# ls = [randint(1, 100) for _ in range(10)]
# print(ls)
ls = [18, 57, 38, 57, 71, 67, 81, 4, 49, 60]

def sumLs(ls):
    if len(ls) == 1:
        return ls[0]
    return ls[0] + sumLs(ls[1:])
print(sumLs(ls))
print(sum(ls))
# sum2Ls(ls, l) 代表求 [l, n]索引区间的数组和
def sumArray(ls):
    def sum2Ls(ls, l=0):
        # if l == len(ls)-1:
        #     return ls[l]
        if l == len(ls):
            return 0
        return ls[l] + sum2Ls(ls, l + 1)
    return sum2Ls(ls, 0)

print(sumArray(ls))

数组排序

# ls = [18, 57, 38, 57, 71, 67, 81, 4, 49, 60]

def ins(li, k):
    if k==0:
        return
    # 对前k个元素进行排序
    ins(li, k-1)
    # 把位置k的元素插入到前面的部分
    x = li[k]  # 值
    index = k - 1 # 位置
    # 只要左面比右面大, 就循环
    while x < li[index]:
        li[index + 1] = li[index]
        index -=1
    li[index+1] = x
    print(li)
ins([1, 4, 3, 2], 3)

打印

# 打印 f - e的 数
def pri(f, e):
    if f > e:
        return
    else:
        print(f)
        return pri(f+1, e)
# def pri(f, e):
#     x = f
#     print(x)
#     if f+1 == e:
#         return e
#     pri(f+1, e)
pri(1, 6)

有一个有N个台阶的楼梯,你一次可以爬1或2个台阶。

给定N,编写一个函数,返回爬完楼梯的方式数量。步骤的顺序很重要。

例如,如果N是4,那么有5种方式:

1,1,1,1

2,1,1

1,2,1

1,1,2

2,2

如果规定的不是一次只能爬1或2步,而是可以使用正整数X集合内的任意数字爬楼梯,那会怎么样?例如,如果X = {1,3,5},则表示一次爬升1,3或5阶楼梯。
解决方案
从一些测试案例开始总是好的做法。让我们从小的案例开始,看看能否找到某种规律。

N = 1,1种爬楼方式:[1]

N = 2,2种爬楼方式:[1,1],[2]

N = 3,3种爬楼方式:[1,2],[1,1,1],[2,1]

N = 4,5种爬楼方式:[1,1,2],[2,2],[1,2,1],[1,1,1,1],[2,1,1]

你有没有注意到什么?请看N = 3时,爬完3阶楼梯的方法数量是3,基于N = 1和N = 2。存在什么关系?

爬完N = 3的两种方法是首先达到N = 1,然后再往上爬2步,或达到N = 2再向上爬1步。所以 f(3) = f(2) + f(1)。

这对N = 4是否成立呢?是的,这也是成立的。因为我们只能在达到第三个台阶然后再爬一步,或者在到了第二个台阶之后再爬两步这两种方式爬完4个台阶。所以f(4) = f(3) + f(2)。

所以关系如下: f(n) = f(n – 1) + f(n – 2),且f(1) = 1和f(2) = 2。这就是斐波那契数列。

当然,这很慢(O(2^N))——我们要做很多重复的计算!通过迭代计算,我们可以更快:

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:29:51  更:2021-10-25 12:31:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:34:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码