PHP 재 귀 알고리즘 및 응용 방법 에 대한 소개

PHP 는 동적 페이지 WEB 개발 의 최 우선 기술 로 서 그 기초 지식 에 대해 우 리 는 반드시 명심 해 야 프로 그래 밍 에 도움 이 될 수 있다.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);   }   }

좋은 웹페이지 즐겨찾기