如何在 python 中构建递归函数?[重复]

2025-03-05 09:18:00
admin
原创
7
摘要:问题描述:如何在 python 中创建递归函数?解决方案 1:我想知道你的意思是不是“递归”。下面是一个计算阶乘函数的递归函数的简单示例:def factorial(n): if n == 0: return 1 else: return n * factori...

问题描述:

如何在 python 中创建递归函数?


解决方案 1:

我想知道你的意思是不是“递归”。下面是一个计算阶乘函数的递归函数的简单示例:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

递归算法的两个关键要素是:

  • 终止条件:n == 0

  • 减少步骤中,函数每次使用较小的数字调用自身:factorial(n - 1)

解决方案 2:

Python 中的递归与其他语言中的递归一样,递归结构根据其自身定义:

例如,递归类可以是二叉树(或任何树):

class tree():
    def __init__(self):
        '''Initialise the tree'''
        self.Data = None
        self.Count = 0
        self.LeftSubtree = None
        self.RightSubtree = None

    def Insert(self, data):
        '''Add an item of data to the tree'''
        if self.Data == None:
            self.Data = data
            self.Count += 1
        elif data < self.Data:
            if self.LeftSubtree == None:
                # tree is a recurive class definition
                self.LeftSubtree = tree()
            # Insert is a recursive function
            self.LeftSubtree.Insert(data)
        elif data == self.Data:
            self.Count += 1
        elif data > self.Data:
            if self.RightSubtree == None:
                self.RightSubtree = tree()
            self.RightSubtree.Insert(data)

if __name__ == '__main__':
    T = tree()
    # The root node
    T.Insert('b')
    # Will be put into the left subtree
    T.Insert('a')
    # Will be put into the right subtree
    T.Insert('c')

前面已经提到过,递归结构必须有终止条件。在这个类中,这一点并不那么明显,因为它只在添加新元素时才进行递归,而且只额外进行一次。

另外值得注意的是,默认情况下,python 对可用的递归深度有一个限制,以避免占用计算机的所有内存。在我的计算机上,这个限制是 1000。我不知道这是否会根据硬件等而改变。要查看您的:

import sys
sys.getrecursionlimit()

并设置它:

import sys #(if you haven't already)
sys.setrecursionlimit()

编辑:我不能保证我的二叉树是有史以来最高效的设计。如果有人能改进它,我很乐意听听你的看法

解决方案 3:

假设您要构建:u(n+1)=f(u(n)),其中 u(0)=u0

一种解决方案是定义一个简单的递归函数:

u0 = ...

def f(x):
  ...

def u(n):
  if n==0: return u0
  return f(u(n-1))

不幸的是,如果您想计算 u 的高值,您将遇到堆栈溢出错误。

另一个解决方案是一个简单的循环:

def u(n):
  ux = u0
  for i in xrange(n):
    ux=f(ux)
  return ux

但是,如果您希望 n 的不同值具有多个 u 值,则这种方法并不理想。您可以将所有值缓存在一个数组中,但可能会遇到内存不足错误。您可能希望改用生成器:

def u(n):
  ux = u0
  for i in xrange(n):
    ux=f(ux)
  yield ux

for val in u(1000):
  print val

还有许多其他选择,但我猜这些是主要的。

解决方案 4:

递归函数示例:

def recursive(string, num):
    print "#%s - %s" % (string, num)
    recursive(string, num+1)

运行它:

recursive("Hello world", 0)
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1325  
  IPD(Integrated Product Development)流程作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它涵盖了从产品概念产生到产品退市的整个生命周期,通过整合跨部门团队、优化流程等方式,显著提升产品开发的效率和质量,进而为项目的成功奠定坚实基础。深入探究IPD流程的五个阶段与项目成功之间...
IPD流程分为几个阶段   4  
  华为作为全球知名的科技企业,其成功背后的管理体系备受关注。IPD(集成产品开发)流程作为华为核心的产品开发管理模式,其中的创新管理与实践更是蕴含着丰富的经验和深刻的智慧,对众多企业具有重要的借鉴意义。IPD流程的核心架构IPD流程旨在打破部门墙,实现跨部门的高效协作,将产品开发视为一个整体的流程。它涵盖了从市场需求分析...
华为IPD是什么   3  
  IPD(Integrated Product Development)研发管理体系作为一种先进的产品开发模式,在众多企业的发展历程中发挥了至关重要的作用。它不仅仅是一套流程,更是一种理念,一种能够全方位提升企业竞争力,推动企业持续发展的有效工具。深入探究IPD研发管理体系如何助力企业持续发展,对于众多渴望在市场中立足并...
IPD管理流程   3  
  IPD(Integrated Product Development)流程管理旨在通过整合产品开发流程、团队和资源,实现产品的快速、高质量交付。在这一过程中,有效降低成本是企业提升竞争力的关键。通过优化IPD流程管理中的各个环节,可以在不牺牲产品质量和性能的前提下,实现成本的显著降低,为企业创造更大的价值。优化产品规划...
IPD流程分为几个阶段   4  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用