python的递归

今天,我们要讲的内容是关于python的递归。

什么是递归?看这个名字,你也许能够猜出个大概。关于递归,我们有一个很经典的应用,就是我们以前高中一些数学题目中的累乘,像n *(n-1)* (n-2) * ... * 1。在这里,如果要让你计算最终的结果,你可能会想到用for循环来实现,但是,我们在这里可以稍微进行优化一下,比如像这个例子一样:

#for循环
def LSF(n):
  result = n
  for i in range(1,n):
      result *= i
  return result

#递归
def LSF(n)
  if n == 1:
      return 1
  else:
      return  n * LSF(n - 1)

我们来看一下上面这两段代码,第一段是用for循环实现的,第二段是用递归实现的。我们看一下这两段代码有什么区别,先来看for循环,简单的定义了一个区间,然后在这个区间内让每一个数逐渐相乘,就得到了我们要的结果了。重点看一下递归这个操作,先是判断n是否为1,如果为1的话,就直接得到结果,因为n=1,我们用接下来的代码的话,最总结果是0,这样的结果并不准确,然后我们排除1的情况,计算接下来 的值,直接运算n *(n-1)。这样的代码效率可能没有for循环高,但是,可读性却好很多。

最后,我们来讲一下什么是二分查找,所谓的二分查找就是一种寻找某个数据的高效手段。比如我们要在0到100内找到81这个数,我们先把0到100对半分,发现81在50到100之间我们再进行一次对半分,发现81在75到100之间,这样一来,我们经过几次对半分,就找到我们要的数81了,这样的效率要比我们从一数到一百要高得多,具体如何用代码实现,我们明天再讲。

好的,今天的内容就讲到这里啦~

(文章图片若有侵权,请联系作者删除)

原文地址:https://www.cnblogs.com/Galaxyfengfeng/p/9175083.html

时间: 2024-08-28 08:50:00

python的递归的相关文章

关于python最大递归深度 - 998

今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,11,12,13. 代码: class Solution: def __init__(self): self.key = '1' self.result = 0 def countDigitOne(self, n): """ :type n: int :rtype: int &qu

python学习(递归)

一. 递归 递归就是函数自己调用自己 python中递归最大可用深度是997 递归可以用来遍历各种树形结构 #用递归方法查看某一个路径内的文件内容 import os filepath = 'd:\资料下载' #要打开的文件路径 def read(filepath,n): #n为递归深度,也就是用来控制缩进的数量 it = os.listdir(filepath) #按照给出的文件路径打开文件, 返回的it是一个可迭代对象 # print("__next__"in dir(it)) #

六. python进阶(递归)

一 .递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. 递归函数: 一个会调用自身的函数称为递归函数凡是循环能干的事情 递归都能干方式: 写出临界条件 我这一次和上一次的关系 假设当前函数已经能用 调用自身计算上一次结果 在求出本次的结果 必须有一个明确的结束条件:每次进入更深一层递归时,问题规模相比上次递归都应有所减少相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入).递归效率不高,递归层次过多会导致栈溢出(在计

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

python函数递归和生成器

一.什么是递归 如果函数包含了对其自身的调用,该函数就是递归的.递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现.请看示例: 1 def fact(n):#计算给定数字到一的乘积

python 之递归及冒泡排序

一.递归函数 在函数内部,可以调用其他函数,如果一个函数在内部调用本身,这个函数就是递归函数 1.递归的基本原理: 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行(调用本身函数) 递归函数中,位于递归调用前的语句和各级被调函数具有相同的顺序 虽然每一级递归有自己的变量,但是函数代码并不会得到复制 递归函数中必须包含可以终止递归调用的语句 举例: >>> def fun2(i): ... r = fun2(i+1) ... return r

Python之递归

所谓递归其实就是函数本身调用函数,直到满足指定条件之后一层层退出函数, 例如 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?--'" 利用函数编写一个斐波那契数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,258

python非递归全排列

刚刚开始学习python,按照廖雪峰的网站看的,当前看到了函数这一节.结合数组操作,写了个非递归的全排列生成.原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列.因为Python切割数组或者字符串,以及合并比较方便,所以,程序会节省很多代码. 1 def getArrayInsertCharToStr(STR,CHAR): 2 arr =[] 3 s_len = len(STR) 4 index =0 5 while inde

Python基础(递归、模块、包以及正则)-day05

写在前面 上课第四天,打卡: 如果再见不能红着眼,是否还能红着脸: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 2.yield 的表达式形式: x=yield 注意:next(g) #等同于 g.send(None),示例如下: 1 def deco(func): 2 def wrapper(*args,**kwargs): 3 res=func(*args,**kwargs) 4 next(res) 5 return res 6 return