在python中,如何用递归函数来实现循环语句的功能?

在python中,如何用递归函数来实现循环语句的功能?_第1张图片

一:递归函数(recursion)

  1. 函数直接或间接的调用自身
  • 示例(直接调用自身):

import time

def story():

time.sleep(1)

print(“从前有座山”)

print(“山上有座庙”)

print(“庙里有个老和尚”)

story() #直接调用自身

story()

  • 说明:递归本身就是一种循环,首先在函数外部调用了函数stroy,间隔一秒钟的时候,开始讲故事,接着最后一条输出语句输入完毕以后,再调用story(),一直循环下去,如果不加time.sleep(),程序立马就会执行完,而且还会出现一个RecursionError报错(超出了递归的最大深度)。代码如下图:

在python中,如何用递归函数来实现循环语句的功能?_第2张图片

2. 函数间接调用自身的递归

def fa():

fb()

def fb()

fa()

fa()

print(‘’递归结束’’)

说明:此例中首先调用了函数fa(),在函数fa()里面又间接调用了函数fb(),函数fb()又调用了函数fa(),依次循环,永远都不会输出后面的print语句。

在python中,如何用递归函数来实现循环语句的功能?_第3张图片

3. 递归用法说明:

递归一定要控制递归的层数,当符合某一条件时要终止递归。

几乎所有的递归都能用while循环来代替。

示例:

def fx(n):

print(‘递归进入第’, n, ‘层)

if n == 3:

return

fx(n + 1)

print(‘递归退出第’, n, ‘层)

fx(1)

print(‘程序运行结束’)

  • 说明:先把实参的值1传给形参n,打印输出第一条print语句,再判断n是否等于3,如果不等于,执行fx(n+1),此时的形参n的值为2,再输出第一条print语句,执行fx(n + 1),把结果3传果n,打印输出第一条print语句, 再判断n是不是等于3,如果是,返回上一次函数的调用(n=2),并打印输出递归退出第2层,接着再返回第一层……代码如下图:

在python中,如何用递归函数来实现循环语句的功能?_第4张图片

4. 递归的优缺点

  • 优点:

递归可以把问题简单化,让思路更清晰,代码更简洁

  • 缺点:

递归因系统环境影响大,当递归深度太大时,可能会出现不可知的后果。

  • 示例1:

用递归的方法求:1+2+3……+98+99+100的和。

  • 说明:

假设实参为100,把100传给形参,设置递归的终止点,如果小于等于1,返回终止点1,递归结束,否则返回两个的和(上一个数,加上下一个数(参数减1)的和。)如:return 100 + 99;代码如下图:

在python中,如何用递归函数来实现循环语句的功能?_第5张图片

示例2:求5的阶乘。

说明:5的阶乘等于5 X 4 X 3 X 2 X1,代码如下图:、

在python中,如何用递归函数来实现循环语句的功能?_第6张图片
推荐我们的Python学习扣qun:784758214 ,看看前辈们是如何学习的!从基础的python脚本到web开发、爬虫、django、数据挖掘等【PDF,实战源码】,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每天都有大牛定时讲解Python技术,分享一些学习的方法和需要注意的小细节,点击加入我们的 python学习者聚集地

总结:递归可以直接或者是间接调用,递归本身是一种循环,可在内部不用循环语句,实现循环语句的功能,递归通常用在遍历查找文件中(如查找某个文件是否存在这个文件夹中,这时候我们就可以使用递归的方法:遍历文件名称、大小,一个一个的找。)而用循环却无法实现,因为无法确定循环的次数。大家要注意一点,python规定递归的深度是1000,所以我们在做数学运算加法等的时候,只能求1000以内的数,不能超过1000。

你可能感兴趣的:(Python教程)