Python11 递归函数

递归函数

  • 理解:一个函数在内部调用自身本身,这个函数就是递归函数。
  • 优点:递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
  • 递归函数实例:
    • 阶乘

      • 代码:
        ```
        # 阶乘 -递归函数实现 : 例3的阶乘: 1 * 1 * 2 * 3
        def factorial(x):
        if not isinstance(x,(int)) or x < 0 : # 校验参数类型必须是正整数或者是0
        raise TypeError("参数x类型必须是正整数")
        elif x == 0:
        return 1 # 0的阶乘是1
        else:
        return x * factorial(x-1)
        # 分解 return x * factorial(x-1)
        # x = 3 时, 结果是 3 * factorial(3-1)(即x=2)
        # x = 2 时,结果是 2 * factorial(2-1) (即x=1)
        # x = 1 时,结果是 1 * factorial(1-1) (即x=3)
        # x = 0 时,结果是 1
        # 最后结果 3 * 2 * 1 * 1
        print(factorial(3))

        ```

      • 运行结果:
      • 栈溢出:在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出
        • 栈溢出实例:
        • 解决方法:尾递归优化尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
        • 尾递归优化实例:https://www.liaoxuefeng.com/wiki/1016959663602400/1017268131039072

原文地址:https://www.cnblogs.com/thloveyl/p/11391735.html

时间: 2024-11-01 22:55:05

Python11 递归函数的相关文章

关于递归函数的简单认识

关于递归函数的认识是在学习了数据结构的栈这一概念后有新的理解. 首先说一下递归函数的概念,我的理解就是一个自己调用自己本身的函数.既然是调用函数,那先看一下普通的函数调用问题. 一.普通函数调用问题 用主函数main()调用函数sum()函数来作比: void main(){ //其他语句1 sum(); //其他语句2 } 整个程序运行的入口是main(),当main()函数运行完“其他语句1”遇到sum();语句时,main做的工作就是: 1.保存现场(保存现场这一操作就用到了前面提到的栈)

关于JS递归函数细化认识及实用实例

程序调用自身的编程技巧称为递归( recursion). 一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合.用递归思想写出的程序往往十分简洁易懂. 一般来说,递归需要有边界条件.递归前进段和递归返回段.当边界条件不满足时,递归前进:当边界条件满足时,递归返回. 注意: (1)

JavaScript正则表达式检验与递归函数实际应用

JS递归函数(菲波那切数列) 实例解析: 一组数字:0  1  1  2  3  5  8  13 0  1  2  3  4  5  6  7 sl(0)=0; sl(1)=1; sl(2)=sl(0)+sl(1); sl(3)=sl(1)+sl(2); function sl(i){ if(i==0){ return  0; }else if(i==1){ return  1; }else{ return  sl(i-1)+sl(i-2); } } 正则表达式检验 //校验是否全由数字组成

python开发函数进阶:递归函数

一,什么叫递归 #递归#在一个函数里调用自己#python递归最大层数限制 997#最大层数限制是python默认的,可以做修改#但是我们不建议你修改 例子和尚讲故事 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #:基础版本 5 def story(): 6 print("从前有座山,山里有座庙,庙里有个老和尚讲故事,讲的什么呀?") 7 while True: 8 story() 9 10 #:递归版本 11 def story

Day10:内置函数、匿名函数、递归函数

一.内置函数 1.数学运算类 2.集合类操作 内置函数个别使用示例 1.any 集合中的元素有一个为真的时候为真, 特别的,若为空串返回为False 1 print(any([0,''])) 2 print(any([0,'',1])) 执行结果 1 False 2 True 2.divmod 取商得余数,用于做分页显示功能 1 print(divmod(10,3)) #取商得余数,用于做分页显示 执行结果 1 (3, 1) 3.eval  把字符串中的数据结构给提取出来 1 dic={'nam

递归函数初探讨

什么是递归? 所谓的递归 ,就是函数自己直接或者间接的调用自己.复杂算法通常比较容易使用递归实现 从前有座山,山里有座庙,庙里有个老和尚讲故事,从前有座山,山里有座庙,庙里... 这个故事就是现实中递归的一个例子,循环往复,生生不息. 以下就是递归函数最简单的一个例子 function foo(n){ return n + foo(n-1); } foo(); 递归中最重要的就是如何跳出循环,因为只有程序跳出了才有结果.如果定义错误,或者缺少终结条件 可导致冻结用户界面 递归的思想:划归思想 递

python递归函数下不能正常使用yield

# -*- coding:utf-8 -*- import os import time file_list = [] def findFile(path): listFile = os.listdir(path) for file in listFile: try: file =os.path.join(path,file) if os.path.isfile(file): yield file # test1 #file_list.append(file) # test2 #print(fi

递归函数

# -*- coding: utf-8 -*- #python 27 #xiaodeng #递归函数 #508 #定义: #在函数内部,可以调用其他函数,如果一个函数在内部调用其自身,这个函数就是递归函数 #递归 ''' (1)递归就是在过程或函数里调用自身[调用自身] (2)在使用递归策略时,必须有一个明确的递归结束条件,称之为递归出口 递归算法要解决的3个问题: (1)数据的定义是按递归定义的 (2)问题解法按递归算法实现 (3)数据的结构形式是按递归定义的 ''' #案例1 def mys

php利用递归函数实现无限级分类

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了.其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类.分类无处不在,分类显得“无限”.我这里就不说无限分类的必要性了. 无限级分类原理简介 无限分类看