22-python基础11-递归函数

递归

1.定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

阶乘实例

1 n = int(input(">>:"))
2
3
4 def f(n):
5     s = 1
6     for i in range(2, (n + 1)):
7         s *= i
8     return s
9 print(f(n))

递归

1 def factorial_new(n):
2
3     if n==1:
4         return 1
5     return n*factorial_new(n-1)
6
7 print(factorial_new(3))

递归函数的特点:

  1 调用自身函数

  2 有一个明显的结束条件,问题规模相比上次递归有所减少

优点: 定义简单,逻辑清晰,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。

但是,递归的效率不高,递归层次过多会导致栈溢出,大概1000层。

2.斐波那契数列

 1 def fibNum(n):          #斐波那契数列
 2     a, b = 0, 1
 3     for i in range(n):
 4         b, a = a+b, b
 5     return b
 6 n = int(input(">>:"))
 7 if n == 1:
 8     print(0)
 9 elif n == 2:
10     print(1)
11 else:
12     print(fibNum(n-2))

用递归写

 1 def fibo(n):
 2     before = 0
 3     after = 1
 4     if n == 0 or n == 1:
 5         return n
 6
 7     if n <= 3:
 8         return 1
 9     return fibo(n-1)+fibo(n-2)
10
11 print(fibo(3))

递归效率低,当数字过大时,会很慢

3.python递归的限制


import sysprint(sys.getrecursionlimit())#1000sys.setrecursionlimit(10000)print(sys.getrecursionlimit())#10000
时间: 2024-08-04 20:13:12

22-python基础11-递归函数的相关文章

1.22 Python基础知识 - 正则表达式

Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数. 本章节主要介绍Pyt

2015/9/22 Python基础(18):组合、派生和继承

一个类被定义后,目标就是把它当成一个模块来使用,并把这些对象嵌入到你的代码中去,同其他数据类型及逻辑执行流混合使用.有两种方法可以在你的代码中利用类.第一种是组合,就是让不同的类混合并加入到其他类中,来增强功能和代码重用性.你可以在一个大点的类中创建你自己的类的实例,实现一些其他属性和方法来增强原来的类对象.另一种是派生,通过子类从基类继承核心属性,不断地派生扩展功能实现. 组合举例来说,我们想对之前做过的地址本类作加强性设计.如果在设计的过程中,为names.addresses等创建了单独的类

python基础11 ---函数模块1

函数模块 一.函数模块的作用(为什么要有函数模块) 1.函数模块可以减少代码量 2.函数模块方便阅读 3.函数模块维护性强二.函数模块的本质以及调用方法 1.函数模块的本质就是一个.py结尾的文件,该文件内写入大量函数 2.必须用import来引用函数模块,在调用函数模块时必须以"模块名.函数名"来调用函数模块中的函数. 3.有的时候我们只需要用到模块中的某个函数,也可以用"from 模块名 improt 函数1,函数2"的方式来引用该模块,但只是一次引用,不建议使

python基础11(函数三)

一.函数参数的类型 之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求.而在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数. >>> def display(a,b): print a print b >>> display('hello','world') # 位置参数,即参数是通过位置进行匹配 hel

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模

Python基础11—图形界面编程

一.弹出消息框 要编辑消息框,首先要导入tkinter的messagebox,导入方法:from tkinter.messagebox import * ①弹出提示消息框:showinfo(title='标题',message='内容') ②弹出警告消息框:showwarning(title='标题',message='内容') ③弹出错误消息框:showerror(title='标题',message='内容') 1 from tkinter.messagebox import * 2 sho

python基础教程_学习笔记22:数据库支持

数据库支持 python数据库API 支持sql标准的可用数据库有很多,其中多数在python中都有对应的客户端模块. 全局变量 python DB API的模块特性 变量名 用途 apilevel 所使用的python db api版本 threadsafety 模块的线程安全等级 paramstyle 在sql查询中使用的参数风格 异常 异常 超类 描述 StandardError 所有异常的泛型基类 Warning StandardError 在非致命错误发生时引发 Error Stand

python基础教程_学习笔记11:魔法方法、属性和迭代器

魔法方法.属性和迭代器 在python中,有的名称会在前面和后面各加上两个下划线,这种写法很特别.它表示名字有特殊含义,所以绝不要在自己的程序中使用这种名字.在python中,由这些名字组成的集合所包含的方法叫做魔法(或称特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下被python调用,而几乎没有直接调用它们的必要. 准备工作 为了确保类是新型的,应该把赋值语句__metaclass__=type放在你的模块的最开始,或者(直接或间接)子类化内建类(实际上是类型)ob

python基础学习11(核心编程第二版)部分

# -*- coding: utf-8 -*- # ==================== #File: python #Author: python #Date: 2014 #==================== __author__ = 'Administrator' #执行环境 #可调用对象 """ 许多的python 对象都是我们所说的可调用的,即是任何能通过函数操作符“()”来调用的对象.要调用可调用对象, 函数操作符得紧跟在可调用对象之后.Python 有4

python基础——匿名函数及递归函数

python基础--匿名函数及递归函数 1 匿名函数语法 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 2 匿名函数举例 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突.此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lam