함수 내에서 다른 함수를 호출할 수 있습니다. 함수가 내부적으로 자신을 호출하는 경우 해당 함수는 재귀 함수입니다.
예를 들어, 팩트(n) 함수로 표현되는 계승 n! = 1 x 2 x 3 x ... x n을 계산해 보면
fact(n) = 1 x 2입니다. x 3 x ... x (n-1) x n = (n-1)! x n = 사실(n-1) x n
따라서 사실(n)은 n x 사실(n-1)로 표현될 수 있습니다. n= 1이면 특별한 처리가 필요합니다.
따라서 Fact(n)은 재귀적 방식으로 작성할 수 있습니다.
def fact(n): if n==1: return 1 return n * fact(n - 1)
위는 재귀 함수입니다. 시도해 볼 수 있습니다:
>>> fact(1) 1 >>> fact(5) 120 >>> fact(100) 933262154439441526816992388562667004907159682643816214685 92963895217599993229915608941463976156518286253697920827223 758251185210916864000000000000000000000000
fact(5)를 계산하면 함수 정의에 따라 다음과 같은 계산 과정을 볼 수 있습니다.
===>fact(5)
===> 4)
= ==> 5 * (4 * 사실(3))
===> 5 * (4 * (3 * 사실(2)))
===> 3 * (2 * 사실(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
=== > 5 * (4 * 6)
===> 5 * 24
===> 120
재귀 함수의 장점은 간단한 정의와 명확한 논리입니다. 이론적으로 모든 재귀 함수는 루프로 작성할 수 있지만 루프의 논리는 재귀만큼 명확하지 않습니다.
재귀 함수를 사용할 때 스택 오버플로를 방지하도록 주의하세요. 컴퓨터에서 함수 호출은 스택의 데이터 구조를 통해 구현됩니다. 함수 호출이 입력될 때마다 스택 프레임이 스택에 추가됩니다. 스택 크기는 무한하지 않기 때문에 재귀 호출이 너무 많으면 스택 오버플로가 발생합니다. Fact(1000)을 시도해 볼 수 있습니다:
>>> fact(1000) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 4, in fact ... File "<stdin>", line 4, in fact RuntimeError: maximum recursion depth exceeded in comparison
위 내용은 Python 재귀 알고리즘은 어렵나요? Python 재귀 함수의 자세한 예는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!