PHP 재 귀 알고리즘 및 응용 방법 에 대한 소개
1.서브루틴 을 호출 하 는 의미:
주 프로그램 이 서브루틴 A 문 구 를 호출 할 때 시스템 은 필요 한 현장 데 이 터 를 저장 한 다음 에 BASIC 언어 와 유사 한 GOTO 문 구 를 실행 하고 서브루틴 A 로 넘 어 갑 니 다.서브루틴 A 가 서브루틴 B 문 구 를 호출 할 때 시스템 작업 은 위 와 같이 서브루틴 B 로 넘 어 갑 니 다.서브루틴 B 가 모든 문 구 를 실행 한 후에 서브루틴 A 가 서브루틴 B 문 구 를 호출 하 는 다음 문 구 를 되 돌려 줍 니 다.서브루틴 A 가 실 행 된 후에 메 인 프로그램 으로 돌아 가 서브루틴 A 문장의 다음 문 구 를 호출 합 니 다.메 인 프로그램 은 끝 날 때 까지 실 행 됩 니 다.비교 해 보 자.내 가 밥 을 먹다 가(주 프로그램 을 실행 하 다)반 을 먹 었 을 때 누군가가 나 를 불 렀 다.말 을 반 쯤 하고 전화 가 울 렸 다.(서브루틴 을 실행 하 다 B)나 는 먼저 전 화 를 받 고 누 군가 와 이 야 기 를 다 한 다음 에 밥 을 다 먹었다.
2.재 귀 함수 인식
우 리 는 고등학교 때 수학 귀납법 을 배 웠 는데 PHP 귀속 알고리즘 은 다음 과 같다.
제발우 리 는 n 을!이렇게 정의 하면 요구 3!우 리 는 먼저 2 를 구 해 야 한다!요구 2!,먼저 1 을 구 해 야 해!,요구 1!,먼저 0 을 구 해 야 해!그리고 0!=1,그래서 1!=0!*1=1,더 나 아가 2!,3!。각각 함수 로 표시 하면 우 리 는 계산 0 을 제외 하고 관찰 할 수 있다!서브루틴 을 제외 하고 다른 서브루틴 은 기본적으로 비슷 합 니 다.우 리 는 이러한 서브루틴 을 설계 할 수 있 습 니 다.
int factorial(int i){ int res; res=factorial(I-1)*i; return res; } 그러면 주 프로그램 문구 s=factorial(3)을 실행 할 때 factorial(3)을 실행 하지만 factorial(3)을 실행 할 때 factorial(2)을 호출 합 니 다.이때 factorial(3)과 factorial(2)은 같은 코드 세그먼트 이지 만 메모리 에 있 는 데이터 영역 은 두 개 입 니 다!그리고 factorial(2)을 실행 할 때 factorial(1)을 호출 하고 factorial(1)을 실행 할 때 factorial(0)을 호출 합 니 다.factorial 함 수 를 호출 할 때마다 메모리 에 데이터 영역 을 추가 합 니 다.그러면 여러 개의 함 수 를 복 사 했 습 니 다.여러 개의 서로 다른 함수 로 이해 할 수 있 습 니 다.그러나 우리 함수 에 문제 가 있 습 니 다.factorial(0)을 실행 할 때 factorial(-1)을 호출 합 니 다.데 드 사이클 을 만 듭 니 다.즉,factorial 함수 에서 우 리 는 적당 한 시기 에 이 함 수 를 다시 호출 하지 않도록 해 야 합 니 다.즉,res=factorial(I-1)*i 를 실행 하지 않 는 것 입 니 다.이 호출 문.그래서 함 수 는:
int factorial(int i){ int res; if (I>0) res=factorial(I-1)*i; else res=1; return res; } 3.어떻게 PHP 재 귀 알고리즘 으로 문 제 를 해결 할 것 인 가 를 고려 합 니까?
예:s=1+2+3+4+5+6+.여기 서 만약 에 재 귀 하 는 방법 을 사용 하려 면 반드시 두 가 지 를 고려 해 야 한다.1)문 제 를 재 귀 형식의 묘사 로 바 꿀 수 있 는 지 를 고려 해 야 한다.2)귀속 종료 의 경계 조건 이 있 는 지 여부.
분명히 재 귀 하 는 두 가지 조건 이 모두 있다.
1) s(n) =s(n-1)+n 2)s(1)=1 그러므로 원본 프로그램 은:
int progression(int n){ int res; if (n=1 )res=1 else res=progression(n-1)+n; return res; } 4.재 귀적 응용
두 갈래 나 무 를 가운데 로 옮 겨 다 니 기
void inorder (BinTree T){ if (T){ inorder(T->lchild); printf(“%c”,T->data); inorder(T->rchild); } }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.