python 递归相关知识总结

 更新时间:2021年03月03日 09:36:37   作者:把苹果咬哭  
这篇文章主要介绍了python 递归相关知识总结,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

听到递归总觉得挺高大上的,为什么呢?因为对其陌生,那么今天就来一文记住递归到底是个啥。

不过先别急,一起来看一个问题:求10的阶乘(10!)。

求x的阶乘,其实就是从1开始依次乘到x。那么10的阶乘就是 1*2*3*4*5*6*7*8*9*10

一、非递归方式求阶乘

假如,我们在没接触过递归的情况下,如何去解决这样的问题呢?

最简单粗暴的方式 直接print(1*2*3*4*5*6*7*8*9*10)出结果就行了,结果是3628800。

但是这种方式显然不是我们想要的,那么可以试试用for循环的方式来解决。

def factorial(n):
 """
 n 就是要求的阶乘的数字
 """
 result = n
 for i in range(1, n):
  result *= i

 return result

if __name__ == '__main__':
 print(factorial(10))

二、递归方式求阶乘

1. 什么是递归?

相信大家一定都听过这么一个故事:

从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
  从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
    从前有座山,山里有做庙,庙里有个老和尚在讲故事,讲的什么呢?
      ...

其实这种就是递归,说白了,就是自己去引用自己。
那么,递归用在函数中,就可以是这样的:

def factorial():
 factorial() 

if __name__ == '__main__':
 factorial()

在调用函数factorial的时候 在函数中又继续调用factorial,跟上面的故事一样,就可以无穷无尽的递归下去,
直到讲故事的老和尚累晕,以及电脑的内存溢出宕机。

但是,重要的一点,递归只是解决问题的一种方式而已,比如上面的求阶乘,我用for循环一样解决。

2. 递归解决阶乘

如果要用递归解决上面的阶乘问题,可以再进一步了解下递归的整体思想。

递归的整体思想就是,将一个大问题分解成一个个的小问题,直到问题没有办法再继续分解,于是,再去解决问题。
那么,递归式函数就要满足2个条件:

  • 基线条件:问题可以被分解为的最小问题,当满足基线条件时候,递归不再进行
  • 递归条件:继续分解问题

可以用这个思想来尝试用递归的方式解决阶乘的问题。

10! = 10 * 9! # 10的阶乘其实可以看做是10 * 9的阶乘
9! = 9 * 8!  # 9的阶乘可以看做是9 * 8的阶乘
8! = 8 * 7!
...
2! = 2 * 1!
1! = 1

可以看到,最后分解到1的时候就不可再继续分解了,那么1就是基线条件了。

def factorial(n):
 # 基线条件,当满足时,则不再递归
 if n == 1:
  return 1

 # 递归条件,当n不等于1时,继续递归
 return n * factorial(n - 1)

if __name__ == '__main__':
 print(factorial(10))

三、总结

  • 递归:只是解决问题的一种方式,不一定非要用
  • 递归式函数:就是函数自己调用自己
  • 递归的2个条件:基线条件(满足则不再递归)、递归条件(满足则基线递归)
  • 递归跟循环类似:基本可以互相替代
  • 循环编写起来比较容易,阅读起来比较难。递归编写起来比较难,但是阅读容易

以上就是python 递归相关知识总结的详细内容,更多关于python 递归的资料请关注脚本之家其它相关文章!

相关文章

  • 轻松实现TensorFlow微信跳一跳的AI

    轻松实现TensorFlow微信跳一跳的AI

    这篇文章主要教大家如何轻松实现TensorFlow微信跳一跳的AI,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 详解Django CAS 解决方案

    详解Django CAS 解决方案

    这篇文章主要介绍了详解Django CAS 解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 用Python画小女孩放风筝的示例

    用Python画小女孩放风筝的示例

    今天小编就为大家分享一篇用Python画小女孩放风筝的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python实现自动生成SQL语句

    python实现自动生成SQL语句

    在数据处理和管理中,SQL(Structured Query Language)是一种非常重要的语言,本文主要介绍了如何使用python实现自动生成SQL语句,需要的可以参考下
    2024-04-04
  • python中Lambda表达式详解

    python中Lambda表达式详解

    在本篇文章里小编给大家整理的是关于python中Lambda表达式的相关知识点内容,有需要的朋友们可以学习下。
    2019-11-11
  • Python定时发送消息的脚本:每天跟你女朋友说晚安

    Python定时发送消息的脚本:每天跟你女朋友说晚安

    今天小编就为大家分享一篇关于Python定时发送消息的脚本:每天跟你女朋友说晚安的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Python爬取智联招聘数据分析师岗位相关信息的方法

    Python爬取智联招聘数据分析师岗位相关信息的方法

    这篇文章主要介绍了Python爬取智联招聘数据分析师岗位相关信息的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 基于Django模板中的数字自增(详解)

    基于Django模板中的数字自增(详解)

    下面小编就为大家带来一篇基于Django模板中的数字自增(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • tensorflow学习笔记之简单的神经网络训练和测试

    tensorflow学习笔记之简单的神经网络训练和测试

    这篇文章主要为大家详细介绍了tensorflow学习笔记,用简单的神经网络来训练和测试,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Python xlrd读取excel日期类型的2种方法

    Python xlrd读取excel日期类型的2种方法

    这篇文章主要介绍了Python xlrd读取excel日期类型的2种方法,本文同时讲解了xlrd读取excel某个单元格的方法,需要的朋友可以参考下
    2015-04-04

最新评论