인간의 뇌 이해는 귀착된다.

4737 단어
귀속은 정말 기묘한 사고방식이다.대학교 2학년 때부터 저는 귀속을 배운 이래로 간단한 귀속 문제에 대해 항상 귀속 묘사 문제와 코드 작성의 간결함에 감탄했습니다.그러나 전체적인 감각이 순환을 관통적으로 이해하지 못하고 때로는 뇌로'순환'을 깊이 파고들려고 시도하는데 차원이 깊을 때 들어갈 수 없고 나올 수 없는 느낌이 자주 발생한다.이런 상태도 나로 하여금 귀속을 유연하게 운용하여 문제를 해결하기 어렵게 한다.어느 날, "To Iterate is Human, to Recurse, Divine."라는 영어를 보았습니다.사람의 이해는 교체되고 신의 이해는 귀착된다.그리고 나서 나는 귀속에 대한 깊은 이해를 마음 편히 포기했다.왕은이 프로그램 언어의 가장 정화된 원리를 보았을 때 귀속을 언급했고 귀속은 순환 표현 능력보다 훨씬 강하고 효율이 거의 같다고 말했다.귀속에 대한 이해와 탐색을 다시 한 번 일깨워 주었다.
나는 먼저 알기에 다음과 같은 두 가지 예를 발견하고 귀속과 순환을 비교했다.예는 이용자 이계강의 대답에서 비롯됐다.
귀속: 네가 앞에 있는 이 문을 열면 집 안에 또 한 개의 문이 있는 것을 볼 수 있다. (이 문은 앞에 열린 문과 크기가 같을 수도 있고 (조용할 수도 있고) 문이 좀 작을 수도 있다. 네가 지나가면 손에 있는 열쇠가 그것을 열 수 있다는 것을 발견할 수 있다. 네가 문을 열고 안에 또 한 개의 문이 있는 것을 발견하면 네가 계속 열어라...몇 번 후에 네가 앞에 있는 문을 열었는데 방이 하나밖에 없고 문이 없는 것을 발견했다.너는 원래의 길로 돌아오기 시작했다. 한 칸씩, 한 번 세어 보아라. 입구에 도착했을 때, 너는 도대체 이 열쇠로 몇 개의 문을 열었는지 대답할 수 있다.
순환: 네가 앞에 있는 이 문을 열면 집 안에 문이 하나 더 있는 것을 볼 수 있다. (이 문은 앞에 열린 문과 크기가 같을 수도 있고 (조용할 수도 있고) 문이 좀 작을 수도 있다. 네가 지나가면 손에 있는 열쇠가 그것을 열 수 있다는 것을 발견할 수 있다. 네가 문을 열면 안에 문이 하나 더 있는 것을 발견할 수 있다.(앞문도 똑같으면 이 문도 똑같고 두 번째 문도 첫 번째 문보다 작아지면 이 문도 두 번째 문보다 작아진다(동정이 똑같으면 변화가 없거나 똑같은 변화가 없다)) 이 문을 계속 열어라...계속 이렇게 걸어가다.입구에 있는 사람들은 시종 네가 돌아가서 그에게 답을 알려주기를 기다릴 수 없었다.
이 사용자는 다음과 같이 요약했습니다.
돌아오는 것은 가는 것도 있고 돌아오는 것도 있다.
**구체적으로 말하면 왜'가다'고 할 수 있습니까? **이 요구하는 귀속 문제는 같은 문제풀이 사고방식으로 규모와 크기가 다른 다른 완전히 같은 문제를 대답할 수 있어야 합니다.
왜'회'가 있을 수 있습니까? 이것은 이런 문제들이 끊임없이 큰 것에서 작은 것, 가까운 것에서 먼 것까지 가는 과정에서 하나의 종점, 하나의 임계점, 하나의baseline을 요구한다. 당신이 그 점에 도착하면 더 작고 더 먼 곳으로 갈 필요가 없는 점, 그리고 그 점에서부터 원래의 길은 원점으로 돌아간다.
위의 설명은 거의 나의 오래된 의문에 대답했다. 왜 나는 항상 문제를 해결하고 있는 느낌이 들지 않는지.건네주는 것은 문제를 묘사하는 것이고, 결국은 문제를 해결하는 것이기 때문이다.내 뇌는 쉽게 점거되고 먼 곳으로만 가고 끝도 못 가는데 무슨 말을 하겠는가.
《만담귀속:귀속사상》이라는 문장은 귀속사상을 다음과 같이 귀납한다.
귀착의 기본 사상은 규모가 큰 문제를 규모가 작은 비슷한 하위 문제로 바꾸어 해결하는 것이다.함수가 실현될 때 큰 문제를 해결하는 방법과 작은 문제를 해결하는 방법은 왕왕 같은 방법이기 때문에 함수가 그 자체를 호출하는 상황이 발생한다.또한 이 문제를 해결하는 함수는 반드시 뚜렷한 종결 조건이 있어야 무한 귀속 상황이 발생하지 않는다.
주의해야 할 것은 규모가 큰 것을 규모가 작은 것으로 전환하는 것이 핵심 사상이지만 귀환은 이 단계의 전환만 하는 것이 아니라 규모가 큰 문제를 규모가 작은 자문제와 자문제 해결을 토대로 남은 스스로 해결할 수 있는 부분으로 분해하는 것이다.후자는 귀의 정수이며 실제 문제를 해결하는 과정이다.
나는 귀환 사상을 귀환용 프로그램으로 표현하고자 세 가지 요소를 확정했다. 그것이 바로 배달+끝조건+귀환이다.
recursion( )
{
     if (end_condition)
     {
          end;     
     }
     else
     {     // , “ ” 
          recursion( );     //go;
          solve;                //back;
     }
}

그러나 나는 이렇게 묘사하는 것이 내가 자주 만나는 귀속 상황, 예를 들어 귀속이 반복되는 두 갈래 나무의 선행을 빠뜨린 것을 쉽게 발견할 수 있다.나는 이런 상황을 다음과 같은 귀속 프로그램으로 표현할 것이다.
recursion( )
{
     if (end_condition)
     {
          end;     
     }
     else
     {     // , 。
          solve;                //back;
          recursion( );     //go;
     }
} 

여기까지 정리한 결과 귀환은 이런 사상을 가장 잘 표현하기 위해서라는 것을 갑자기 발견했다. 그래서'귀환'이라는 단어를 사용했는데 사실 귀환은'유회유회'일 수도 있고'유회무회'일 수도 있다.그러나 그 근본은'큰 것에서 작은 것으로, 가까운 것에서 먼 것으로'이다.'배달'은 필수다.'귀'는 필수가 아니다. 해결해야 할 문제에 의존한다. 어떤 사람은 가는 길에 해결해야 하고, 어떤 사람은 돌아오는 길에 해결해야 한다.점차적으로 돌아가는 귀착은 사실 우리가 쉽게 이해할 수 있는 분치 사상이다.
사실 귀환은'귀'가 없을 수도 있고 가(분치)만 있는 상황을 이해한 후에 우리는 귀환이'가는'길에서 문제를 해결할 필요도 없고'귀'의 길에서 문제를 해결할 필요도 없고 길의 끝에서 문제를 해결할 수 있다는 것을 생각해야 한다. 즉, 정지 조건이 충분할 때 문제를 해결할 수 있다.귀속의 분치 사상은 반드시 문제의 규모를 최소로 귀속시키는 것이 아니라 문제를 모든 상황을 빈틈없이 들추어내는 것이다. 이때 통상적으로 귀속의 표현력은 글을 쓸 수 없는 끼워넣기 순환(불확정한 수량의 끼워넣기 순환)을 귀속을 통해 표현하는 데 나타난다.이러한 반복 상황을 반복 프로그램으로 다음과 같이 설명합니다.
recursion()
{
     if (end_condition)
     {
          solve;     
     }
     else
     {     // , 。
          for () { recursion();     //go; }
     }
}  

예를 들어 문자열의 전체 배열은 다음과 같은 반복을 통해 간결하게 표현할 수 있다.
void permute(const string &prefix, const string &str)
{
    if(str.length() == 0)
        cout << prefix << endl;
    else
    {   
        for(int i = 0; i < str.length(); i++)
            permute(prefix+str[i], str.substr(0,i)+str.substr(i+1,str.length()));
    }   
}

이 예에서 이러한 귀환이 귀환 함수 매개 변수에 대한 설계 요구가 나타났음을 알 수 있다. 귀환이 끝까지 가도 조합된 문자열의 규모(길이)가 작아지지 않고 규모가 작아지는 것은 귀환 함수의 매개 변수이다.이를 통해 알 수 있듯이 이러한 변화는 귀속의 유연성을 크게 확장한 것 같다. 이른바 대규모에서 소규모로 전환하려면 더욱 넓은 이해가 필요하다.
귀속에 대한 이해는 잠시 여기까지 왔다. 글에서 언급한'한 개의 문을 열어라'에 대한 귀속 예로 귀속을 해석하는 것은 정확하지 않고 예는 귀속의 한 가지 상황만 묘사한 것을 알 수 있다.'귀환은 가고(건네주고) 돌아오는 것이다'는 논단도 정확하지 않다.글의 앞부분만 읽은 독자들을 위해 안타까워해야 한다.나도 귀속 사상에 대한 총결을 하자.
귀착의 기본 사상은 규모가 큰 문제를 규모가 작은 비슷한 자문제나 비슷한 자문제 집합으로 광의적으로 전환시켜 해결하는 것이다.광의적으로 규모에 대한 것이고 규모의 축소는 구체적으로 귀속 함수의 매개 변수를 가리킬 수도 있고 그 매개 변수 중의 하나일 수도 있다.비슷하다는 것은 큰 문제를 해결하는 방법과 작은 문제를 해결하는 방법이 종종 같은 방법이며, 또한 자문제집의 각 자문제를 해결하는 방법이 같은 방법이라는 것을 가리킨다.큰 문제를 해결하는 방법은 차규모 문제를 해결하는 방법과 나머지 부분을 해결하는 방법으로 구성될 수도 있고 일련의 차규모 문제를 해결하는 방법으로 구성될 수도 있다.

좋은 웹페이지 즐겨찾기