递归函数和其他拓展

这篇具有很好参考价值的文章主要介绍了递归函数和其他拓展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

递归函数和其他拓展

课前练习

请实现一个装饰器,把'函数的返回值'+100然后'返回'

def ount(fun):
    def werrod(*ardes,**warrrts):

        res=fun(*ardes,**warrrts)
        return res+100
    return werrod
@ount
def funs(intes):
    return int(intes)
res=funs(100)
print(res)

请实现一个装饰器,通过一次调用使函数重复执行5次

def ount(fun):
    def werrod(*ardes,**warrrts):
        count=0
        while count<5:
            print('输出')
            fun(*ardes,**warrrts)
            count+=1

    return werrod
@ount
def funs():
    print('循环')
funs()

请实现一个装饰器每次调用函数时,将函数名字写入文件中


def ount(fun):
    def werrod(*ardes,**warrrts):
        with open('qw','a',encoding='utf-8')as  f:
            f.write(f'name={fun.__name__}\n')
            fun(*ardes,**warrrts)


    return werrod
@ount
def funs():
    pass
funs()

递归函数

递归:直接或者间接的调用其他函数
def index():
    print('from index')
    func()
def func():
    print('from func')
    index()

func()
递归在实际编码中是不允许出现的,一旦出现了无限递归就会直接报错
1. 递推
        一层一层的往下寻找答案
2. 回溯
        通过最后一个结果往回寻找最开始的那个答案
        
    递归是必须有结束条件!!!!

递归的使用场景

阶乘运算
def dig(fun):
    def inter(ase):
        if ase==0:
            return 1
        else:
            return inter(ase - 1) * ase
    return inter(fun)
print(dig(5))


求第5个人的年龄

def inter(ase):
    if ase == 1:
        return 18

    return inter(ase - 1) +2#每个人的年龄相差为2
res=inter(5)
print(res)

算法二分法

二分法的原理

二分法的原理:
	1. 列表必须先排序(从小到大,从大到小)
	2. 折半查找

思路

一般思路
将列表的元素一个一个的经行比较
然后得出结果
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
  for i in l:
        if i == 66:
            print('找到了')
二分法
l=[12,23,124,123,41,24,134,12]
l.sort()
target_num = 200
def my_half(l,target_num):
    if len(l) == 0:
        print('没找到')
        return
    # 3. 取的就是中间的那个索引
    middle_index = len(l) // 2 # 向下取整 5 // 2 == 2  6 // 2 == 3
    if target_num > l[middle_index]:
        l_right = l[middle_index+1:]  #
        print(l_right)
        my_half(l_right, target_num)

    elif target_num < l[middle_index]:
        l_left = l[:middle_index]
        print(l_left)
        my_half(l_left, target_num)
    else:
        print('找到了')

my_half(l, target_num)

三元表达式

对于只有二选一的情况,我们推荐使用三元表达式
	语法结构:
res = 条件成立之后的结果 if 条件 else 条件不成立之后的结果

def my_max(a, b):
    return a if a > b else b
res = my_max(1, 2)
"""还支持嵌套"""
## 不推荐写太多的嵌套,一般两层就够了,超过两层了,建议不这样写,面试的时候:成数非常多
res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1)))
print(res)

列表生成式

names_list = ['kevin', 'jerry', 'tank', 'oscar']
# # 列表生成式
res = [ name + '_SB' for name in names_list]
print(res)
res = [name+'_SB' if name != 'jerry' else name for name in names_list]
print(res)

文章来源地址https://www.toymoban.com/news/detail-707960.html

到了这里,关于递归函数和其他拓展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【再识C进阶3(上)】详细地认识字符串函数、进行模拟字符串函数以及拓展内容

           小编在写这篇博客时,经过了九一八,回想起了祖国曾经的伤疤, 勿忘国耻,振兴中华!加油,逐梦少年! 💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库

    2024年02月07日
    浏览(65)
  • 深入理解递归函数与可控递归的应用

    什么是递归函数 递归函数的本质与循环的关系 递归函数的特点与优势 可控递归的要素 使用C语言详细举例说明可控递归 注意事项:递归层数限制与堆栈溢出问题 递归函数是指函数自己调用自己的过程。在C语言中,通过递归调用,函数能够重复执行某个任务,直到满足特定

    2024年02月12日
    浏览(29)
  • 函数-函数递归及练习

    目录 1、什么是递归? 2、递归的两个必要条件 3、递归的练习  3.1 接受一个整型值(无符号),按照顺序打印它的每一位 3.2 编写函数不允许创建临时变量,求字符串的长度  3.3 求第n个斐波那契数 3.4 字符串逆序(递归实现)  总结 程序调用自身的编程技巧称为递归(

    2024年02月02日
    浏览(41)
  • 【C++学习手札】-引用与内联函数以及C++中对const拓展详解(超详细!)

                                           食用指南:本文在有C基础的情况下食用更佳                                        🔥 这就不得不推荐此专栏了:C语言                                        🍀 内联函数前置知识 :宏函数

    2024年02月14日
    浏览(53)
  • 【C语言】——递归函数,用递归简化并实现复杂问题

    不多废话了,直接开始。 递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的方法,在C语言中,递归就是函数调用自己。 写⼀个史上最简单的C语言递归代码: 上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式

    2024年02月03日
    浏览(35)
  • 【C语言】——函数递归,用递归简化并实现复杂问题

    不多废话了,直接开始。 递归是学习C语言函数绕不开的⼀个话题,那什么是递归呢? 递归其实是⼀种解决问题的方法,在C语言中,递归就是函数调用自己。 写⼀个史上最简单的C语言递归代码: 上述就是一个简单的递归程序,只不过上面的递归只是为了演示递归的基本形式

    2024年02月05日
    浏览(41)
  • 「算法小记」-1:Ackermann函数/阿克曼函数的一点思考解法【递归/非递归/堆栈方法】(C++ )

    😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号:程序员洲洲。 🎈 本文专栏:本文收录于洲洲的《算法小记》系列专栏,该专栏记录了许

    2024年02月08日
    浏览(50)
  • 深度解析JavaScript递归函数

    深度解析JavaScript递归函数 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在今天的文章中,我们将深入研究JavaScript中一个强大而神秘的编程概念——递归函数。让我们一起探秘递归的魅力,深入了解其

    2024年01月19日
    浏览(43)
  • 7.6 函数的递归调用

      直接递归调用是指一个函数直接调用自己。例如,计算阶乘的函数,可以使用递归方法: 在这个例子中,`factorial` 函数在其函数体内直接调用了自己,这就是直接递归。   间接递归调用是指函数A调用函数B,然后函数B再调用函数A。这也称为循环递归。 考虑以下的例子:

    2024年02月10日
    浏览(32)
  • 006-函数递归,内联,变参,声明

    函数嵌套: ​ 函数与函数之间相互进行调用; 递归函数: ​ 特殊的嵌套函数 ​ 特殊在递归函数是自己调用自己 ​ 即是函数A的函数体重又一次调用了函数A自己 ​ 函数A调用了函数B,函数B中又调用了函数A,两者属于递归吗? 属于递归 每一次调用函数,进行递归时,系统

    2024年02月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包