>백엔드 개발 >파이썬 튜토리얼 >Python 재귀 함수를 이해하는 데 도움이 되는 기사

Python 재귀 함수를 이해하는 데 도움이 되는 기사

Go语言进阶学习
Go语言进阶学习앞으로
2023-07-25 16:43:251431검색

1. 재귀함수란 무엇인가요?

함수 내에서 다른 함수를 호출할 수 있습니다. 함수가 내부적으로 자신을 호출하면 재귀적입니다.


2. 함수의 재귀 호출 원리

  • 실제로 재귀 함수는 스택 메모리에서 재귀적으로 실행되며, 각 재귀 실행은 일부 스택 메모리를 소비합니다.

  • 스택 메모리의 크기는 재귀의 깊이를 제한하는 중요한 요소입니다

3. 계승 찾기

계산 n! = 1 x 2 x 3 x … x n,

은 함수 Fact(n)로 표현될 수 있습니다.

fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x n
fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。

따라서 Fact(n)은 재귀적으로 작성됩니다.

def fact(n):    if n == 1:        return 1    return n * fact(n - 1)

如果计算fact(6),可以根据函数定义看到计算过程如下:

def fac(n):    if n==1:        return 1    else:        res=n*fac(n-1)        return  res
print(fac(6))

运行结果:

Python 재귀 함수를 이해하는 데 도움이 되는 기사

  1. 斐波拉契级数

有这样一个数列:1,1,2,3,5,8,13,21,34…。其第一元素和第二个元素等于 1,其他元素等于其前面两个元素的和。

例:

def fab(n):  # 定义斐波拉契级数    if n in [1, 2]:  # 如果n=1或者2      return 1    return fab(n - 1) + fab(n - 2)  # n>2

print(fab(1))  # 斐波拉契级数的第一个元素
print(fab(2))  # 斐波拉契级数的第二个元素
print(fab(8))  # 斐波拉契级数的第8个元素print(fab(13))  # 斐波拉契级数的第9个元素

运行结果:

Python 재귀 함수를 이해하는 데 도움이 되는 기사

  1. 递归函数的优点

定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。

递归需要注意递归的深度。由于递归会产生多次函数调用,而函数调用会消耗代码的栈空间,如果递归的深度太大,会导致栈溢出。以上面的阶乘为例,如果计算 100000 的阶乘,在一般机器上都会出现栈溢出的问题。

print(fac(10000))

如下所示:

Python 재귀 함수를 이해하는 데 도움이 되는 기사


4. 요약

이 문서는 Python 기본 사항을 기반으로 합니다. Python의 표준 인터프리터는 꼬리 재귀에 최적화되어 있지 않으며 모든 재귀 함수에는 스택 오버플로가 있습니다. 이 글에서는 재귀 함수 사용의 장점과 단점을 소개합니다. 장점은 논리가 간단하고 명확하지만 단점은 과도한 호출로 인해 스택 오버플로가 발생할 수 있다는 것입니다.

위 내용은 Python 재귀 함수를 이해하는 데 도움이 되는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Go语言进阶学习에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제