如何在Python中创建递归函数

如何在Python中创建递归函数

递归是一种编程技术,在其中一个函数在其主体内调用自身一次或多次。通常,它返回该函数调用的返回值。如果函数定义遵循递归,则称此函数为递归函数。

递归函数必须在程序中使用之前终止。如果在调用中未满足基本情况,则递归可能导致无限循环。

我们在Python中使用递归函数来解决实际数学问题。

前n个自然数的和

以下代码使用递归Python函数返回前n个自然数的总和。

这打印了前100个自然数和前500个自然数的总和。

def sum_n(n):
    if n== 0:
        return 0
    else:
        return n + sum_n(n-1)
print(sum_n(100))
print(sum_n(500))

输出

5050
125250

使用递归计算阶乘

递归函数是指反复调用自身,直到达到递归停止条件(即基本情况)。让我们考虑Python中计算给定数字的阶乘的简单递归函数的示例:

在这里,阶乘函数将正整数n作为参数,并返回该数字的阶乘。如果n等于0,则函数返回1,这是基本情况。否则,函数以n-1为参数递归调用自身,并将结果乘以n。递归将继续直到达到基本情况。

这将使用参数5调用阶乘函数,这将返回5 * 4 * 3 * 2 * 1 = 120。

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

输出

120

使用递归计算斐波那契数列

在这个例子中,斐波那契函数将非负整数n作为参数,并返回斐波那契序列中的第n个数字。如果n等于0,则函数返回0。如果n等于1,则函数返回1。否则,函数以n-1和n-2为参数递归调用自身,并返回结果的总和。递归将继续直到达到基本情况。

这将使用参数6调用Fibonacci函数,这将返回斐波那契序列中的第6个数字,即8。

def fibonacci(n):
    if n == 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n-1) + fibonacci(n-2)
print(fibonacci(6)) 

输出

8

如何查找数字的GCD:

Python中递归函数的另一个示例是查找两个正整数的最大公约数(GCD):

在此示例中,gcd函数将两个正整数a和b作为参数,并返回它们的最大公约数。如果b等于0,则函数返回a,这是基本情况。否则,函数以参数b和a%b递归调用自身,其中%是模运算符,并返回结果。递归将继续直到达到基本情况。

这将使用24和36的参数调用gcd函数,这将返回它们的最大公约数,即12。

def gcd(a, b):
    if b == 0:
        return a
    else:
        return gcd(b, a % b)
print(gcd(24, 36))

输出

12

计算正整数的数字之和:

在这个例子中,sum_digits函数将正整数n作为参数,并返回其数字之和。如果n小于10,则函数返回n,这是基本情况。否则,函数将n的最后一位数字加到n除以10的数字总和中,使用整数除法(//运算符)并使用结果递归调用自身。递归将继续直到达到基本情况。

这将使用12345作为参数调用sum_digits函数,这将返回其数字之和,即1 + 2 + 3 + 4 + 5 = 15。

def sum_digits(n):
    if n < 10:
        return n
    else:
        return n % 10 + sum_digits(n // 10)
print(sum_digits(12345)) 

输出

15

查找字符串长度:

在这个例子中,string_length函数将字符串s作为参数,并返回其长度。如果s是空字符串(”),则函数返回0,这是基本情况。否则,函数将1添加到通过切片获得的字符串的长度(s[0])并递归调用余下的字符串(s[1:])的string_length函数。递归将继续直到达到基本情况。

def string_length(s):
    if s == '':
        return 0
    else:
        return 1 + string_length(s[1:])
print(string_length('hello world'))

输出

11

这将使用’hello world’作为参数调用string_length函数,这将返回其长度,即11。

递归函数可能是某些类型问题的强大而优雅的解决方案,但如果设计不当,它们也可能导致无限递归。重要的是仔细考虑基本情况,并确保函数最终会达到它。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程