귀속의 원인과 그 작업 원리를 사용하다

안녕하세요, 엔지니어들.


오늘 나는 귀속된 내용, 원인과 방식을 토론할 것이다.
귀속이 무엇인지, 왜 그것을 사용하는지, 그리고 그것을 어떻게 써서 문제를 해결하는지.
이 예들은 파이톤을 사용할 것이다. 왜냐하면 파이톤은 이해하기 쉽고 알고리즘에 가깝기 때문이다.
시작해볼까요?

귀속은 무엇입니까?


귀착의 더 복잡한 정의는 같은 유형의 작은 문제를 해결함으로써 문제를 해결하는 기술이다.우리는 귀환은 직접적이거나 간접적으로 자신의 함수를 호출하여 정의를 간소화할 수 있다.이제 걱정하지 마라. 우리가 예를 쓰기 시작했을 때, 그것은 더욱 분명해질 것이다.

귀속을 왜 사용합니까?


나는 이 문제를'언제 귀속을 사용하는가'가 아니라 선택했다. 왜냐하면 많은 연구 귀속을 연구하는 학습자들이 왜 그것을 사용해야 하는지 알고 싶어하기 때문이다. 왜냐하면 우리가 귀속에서 해결할 수 있는 모든 문제는 정상적인 교체 순환에서 해결할 수 있기 때문이다.다음은 저의 답입니다.
1. 학습의 귀속은 당신을 더욱 좋은 프로그래머로 만든다.
학습과 연습의 귀속은 당신이 문제를 해결하는 능력을 향상시키는 데 도움을 줄 수 있다. 왜냐하면 당신은 작은 문제를 작은 문제로 분해하는 방법을 배울 수 있기 때문이다.또한 데이터 구조에서의 창고 원리(창고는 추상적인 데이터 형식으로 질서정연한 선형 항목 서열을 포함), 후진 선출(후진 선출) 원리와 호출 창고를 어떻게 사용하는지 배울 것입니다.
2. 반복을 사용하여 코드를 더욱 명확하게 한다.
귀속 코드는 교체 코드보다 더 간단하고 짧다.귀속 함수는 더 적은 코드 줄로 작성되고 디버깅하기 쉽다.
3. 귀환은 데이터 구조의 가장 좋은 친구이다.
위에서 말한 바와 같이, 귀속 함수는 해석기의 호출 창고를 사용합니다.따라서 우리는 코드를 작성하거나 창고를 만들거나 외부 라이브러리를 사용하지 않고 기존의 호출 창고를 이용할 수 있다.이것은 우리가 창고를 사용하고 싶다면 귀환을 사용할 수 있다는 것을 의미한다.데이터 구조에서 귀속을 사용하는 두 가지 좋은 실현 예는 트리와 그림을 깊이 파고드는 것이다.

어떻게 귀속 함수를 작성합니까?


반복 함수를 작성하기 전에 몇 가지 결정해야 할 요소를 토론합시다.
1 - 치수 계수를 결정합니다.
크기 인자는 정적 값이나 특정 프로그램의 메모리 분배를 초과해서는 안 된다는 것을 의미합니다.간단한 언어에서, 당신의 프로그램은 대량의 숫자가 있어서도 안 되고, 너무 많은 교체가 있어서도 안 된다.마찬가지로, 귀속 함수는 호출 창고를 사용하고, 호출 창고에 제한이 있기 때문이다.창고가 가득 차면 프로그램이 붕괴되고 오류가 발생합니다.

2. 기본 사항 파악:
기본 원인은 프로그램에 따라 하나 이상의 값일 수 있습니다.나는 여기서while 순환을 사용하여 기본 상황을 설명할 것이다.프로그램을 작성하려면while로 "Hello World"를 5번 출력하면 다음과 같이 작성합니다.
def display_hello(i):
    while(i > 0):
        print("hello world")
        i -=1
기본적인 원인은 순환이 언제 멈추는지 결정한다.우리의 예시에서 기본적인 원인은 i=0이다. i의 값이 0일 때 순환이 중단되고 멈추기 때문이다.
귀속의 기본적인 상황은 우리가 특정한 값에 도달하면 호출 함수를 정지하고 호출 창고의 모든 함수를 삭제하고 실행하기를 원한다는 것이다.
호출이 가득 차고 프로그램이 붕괴될 때까지 함수 호출 자체가 기본적인 원인이 없습니다.또한 오류의 기본 원인은 오류의 출력을 초래할 수 있다.

3-일반적인 상황 파악:
일반적인 원인은 문제 자체의 이터레이션이다.즉, 프로그램은 기본적인 원인에 도달할 때까지 일반적인 원인을 계속 교체할 것이다
위의 예에서 i=0이 기본적인 원인으로 간주되고 5를 매개 변수로 보낼 때 우리는 다음과 같은 생각을 할 수 있다.
i=1, i=2, i=3, i=4와 i=5는 일반적인 원인이다.
이제 반복 함수를 작성하여 이전 질문을 사용하여 추적합니다.
우리는 함수를 하나 쓰고 싶은데'hello world'를 세 번 쓸 수 있다.
문제를 분석해 보겠습니다.
함수는 기본 원인을 검사합니다. 현재 상황이 기본 원인과 일치하지 않으면 함수는 자신을 한 번 호출합니다.따라서 증가는 선형 프로세스 (O (n) 일 수 있음) (호출 창고 크기에 있어서 안전할 수 있음)
이제 while 순환 예시를 사용하여 함수를 작성합시다
1 - 기본 원인 ->i=0
def display_hello(i):
   if i>0:
2-인쇄 명령 -> 인쇄("hello world")
def display_hello(i):
   if i>0:
       print("hello world")
3. 매번 교체의 변화 ->i-=1
변수의 새 값을 다음 함수 호출에 보내려면 매개 변수로 써야 합니다
def display_hello(i):
   if i>0:
       print("hello world")
       display_hello(i-1)

이것이 바로 이 작은 문제다.추적하기 전에 함수 호출 후 print 명령을 추가하고, 추적을 더욱 재미있게 하기 위해 결과를 끝에 표시합니다
첫 번째 호출이 다음과 같다고 가정합니다.
display_hello(3)
우리의 기능은 다음과 같습니다.
def display_hello(i):
    if i > 0:
        print("hello world!")
        display_hello(i-1)
        print(f'The i value is {i}')
이제 우리는 그것을 추적할 것이다.
첫 번째 호출에서 함수는 호출 창고에 들어갑니다

그런 다음 프로그램에서 다음 명령을 실행합니다.

4행(함수 호출)에 도달하면 실행이 중지되고 스택에 다른 함수를 추가합니다.

그런 다음 두 번째 호출 함수에서 명령을 실행합니다.

마찬가지로 4행(함수 호출)에 도달하면 실행이 중지되고 스택에 다른 함수를 추가합니다.

이번에, 우리의 기본적인 원인은 아직 만족되지 않았다. i가 여전히 0보다 크기 때문에, 함수가 호출될 때까지 계속 실행하고, 다른 함수를 창고에 추가할 것이다.

마지막으로, 매개 변수는 0이고, 이것은 i의 값이다

실행은 두 번째 줄까지 계속됩니다. 왜냐하면 조건은 i가 0보다 커야 하지만 i는 0이기 때문입니다.그래서 우리는 근본적인 원인을 찾았지만, 소환 '호출' 과 지문을 찾지 못했다

이 함수는 실행해야 할 모든 명령을 완성했기 때문에, 함수를 창고에서 꺼낼 때가 되었다.

현재, 매개 변수가 1일 때, 우리는 이전 함수로 되돌아간다
이제 프로그램에서 나머지 명령을 실행합니다.

함수가 실행해야 할 모든 명령을 완성했습니다. 함수를 창고에서 꺼낼 때가 되었습니다.

이제 함수로 돌아갑니다. 함수의 매개 변수는 2이고 나머지 명령은 다음과 같습니다.

마찬가지로 실행이 완료되면 스택에서 함수를 제거합니다.

이제 첫 번째 호출이 생겼습니다. 3은 매개 변수입니다. 나머지 명령을 실행할 것입니다.

마지막 함수가 스택에서 팝업되고 호출 스택이 비어 프로그램이 종료됩니다.

다음 코드를 실행하여 추적이 정확한지 확인합니다.

오늘의 글은 이만 마치겠습니다.

기쁨이 돌아가다😁


기쁨이 돌아가다😁


기쁨이 돌아가다😁



기쁨이 돌아가다😁

기쁨이 돌아가다😁

작성자 참고 사항:


나는 피보나치를 예로 삼지 않았다. 왜냐하면 이것은 교귀의 좋은 예가 아니라, 귀속은 피보나치 문제를 해결하는 최악의 해결 방안 중의 하나라고 생각했기 때문이다.
본문을 살펴보다

참조 자료:

  • Recursion
  • Recursion: The Pros and Cons
  • Learn All About Recursion in Python and C++ - Udemy
  • 좋은 웹페이지 즐겨찾기