揭秘Python递归

Python中最复杂的任务可以分解为更简单的子任务。 递归有助于实现这一点,从而使代码干净整洁。 本教程将介绍递归,递归的好处以及如何在Python编程中使用它。

什么是递归?

递归是一种使用较小问题的解决方案来解决问题的方法。 这种方法可以应用于编程中的许多类型的挑战。

使用递归的好处

使用递归的一些好处是:

  • 递归在编写代码时增加了简单性,因此使其更易于调试。
  • 递归减少了算法根据输入长度运行所花费的时间。
  • 解决非常复杂的问题(尤其是基于树的结构的问题)时,递归也是首选的,因为它的性能更好。

Python递归函数简介

尽管递归似乎是一个复杂的过程,但并不那么复杂。 用外行的话来说,假设您有两个矩形A和B。如果将它们加在一起,它们将形成一个矩形C。这本身就是一个递归过程。 我们使用矩形的较小实例进行定义,如果要编写Python函数,它将如下所示:

def rectangle(a,b):
    return a+b

由于递归函数会自行调用,因此需要一个规则或一个断点,流程或循环将在该处终止。 这种条件称为基本条件。 每个递归程序都需要一个基本条件,否则该程序将导致无限循环。

第二个要求是函数调用自身时的递归情况。

让我们看一个例子:

在此示例中,您将编写一个阶乘函数,该函数采用整数(正)作为输入。 数字的阶乘可通过将数字乘以该数字下方的所有正整数来获得。 例如, factorial(3) = 3 x 2 x 1factorial(2) = 2 x 1factorial(0) = 1

首先要做的是定义基本情况,即乘数(0)= 1。

如您在上面看到的,每个连续的析因方案之间都有一个关系。 您应该注意到factorial(4)= 4 x factorial(3)。 同样,阶乘(5)= 5 x阶乘(4)。

第二部分将编写一个调用自身的函数。

现在我们对其进行了简化,结果函数将是:

def factorial(n):
    if(n == 0):
	  #Define our base case?
		return 1  
	else:
		return n*factorial(n-1) 
		
print(factorial(5))

#result 

# 120

如果n==0的解决方案是:

def factorial(n):
    if(n == 0):
      #Define our base case?
		return 1  
	else:
		return n*factorial(n-1) 
		
print(factorial(0))

#result 

# 0

现在您知道如何编写递归函数,下面让我们看几个案例研究,这些案例研究将巩固您对递归的理解。

案例研究1:斐波那契

在斐波那契数列中,每个数字是两个前面的数字的总和,例如:1 +1 = 2; 1 + 2 = 3; 2 + 3 = 5; 3 + 5 =8。斐波那契数列已应用在许多领域,最常见的是预测外汇交易者在股票市场中的价格走势。

Fibonacci序列以0和1开头。Fibonacci序列的第一个数字为0,第二个数字为1,序列中的第三个项为0 +1 =1。第四个为1 +1 = 2,依此类推。 。

为了提供一个递归函数,您需要有两个基本情况,即0和1。然后可以将添加模式转换为else情况。

结果函数将是:

def fibonacci(n):
    if(n == 1):
	  #define Base case 1 
		return 0+1 
	elif(n == 2):
	  #define Base case 1 
		return 1+2 
	else:
		return fibonacci(n) + fibonacci(n-1)
		
print(fibonacci(5))

#result

#

案例研究2:反转字符串

在此示例中,您将编写一个函数,该函数将字符串作为输入,然后返回字符串的反序。

要做的第一件事是定义我们的基本情况,该情况将检查字符串是否等于0,如果等于0,则返回字符串本身。

第二步是递归调用反向函数以对字符串中除第一个字符之外的部分进行切片,然后将第一个字符连接到切片字符串的末尾。

结果函数如下所示:

def reverse(a):
  
    if len(a) == 0:
        return a
    else:
        return reverse(a[1:]) + a[0]

print(reverse("Python is a very easy language to learn"))

# result

#nrael ot egaugnal ysae yrev a si nohtyP

案例研究3:元素总数

在此示例中,您将编写一个函数,该函数将数组作为输入,然后返回列表中元素的总和。

要做的第一件事是定义基本情况,该情况将检查列表的大小是否为零,如果为True,则返回0。

第二步返回元素,并调用函数sum()减去列表中的一个元素。

解决方案如下图所示:

def sum_of_numbers(l):
   if len(l) == 1:
        return 0
   else:
        return l[0] + sum(l[1:])
        
a =[5,7,3,8,10]

print(sum(a))

# result
# 33

空列表的解决方案如下所示:

def sum_of_numbers(l):
   if len(l) == 1:
        return 0
   else:
        return l[0] + sum(l[1:])
        

b =[]
 
print(sum(b))

# result

# 0

结论

本教程介绍了使用递归解决Python中复杂程序的必要条件。 同样重要的是要注意递归有其自身的局限性:

请记住,不要犹豫,看看我们可以在Envato市场上出售和研究的东西 ,请提出任何问题,并使用下面的提要提供您的宝贵反馈。

翻译自: https://code.tutsplus.com/tutorials/demystifying-python-recursion--cms-30418

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值