JavaScript의 재귀에 대한 추가 예
더 많은 예
두 번째 재귀적 예는 두 자연수의 최대 공약수를 찾는 것입니다(그리운 중학교 시절로 돌아간 적이 있습니까). 아래 프로그램은 고전적인 유클리드 나눗셈 방법을 사용합니다.
[javascript]
//최대 공약수
//a와 b가 모두 양의 정수라고 가정
function gcd(a, b){
if (a < ; b) return gcd(b, a);//a >= b
var c = a % b
if (c === 0)
return b; else
return gcd(b, c);
}
//a와 b가 모두 양의 정수라고 가정
function gcd(a, b) {
if (a < b) return gcd(b, a);//a >= b를 보장
var c = a % b;
if (c === 0)
return b;
else
return gcd(b, c);
}
수학적 재귀 정의 계산으로 변환할 수 있는 위 조건이나 해법 외에도 재귀적 방법도 적용 가능합니다. 관련된 데이터에 대한 구조는 연결된 목록, 그래프, 트리 등과 같은 재귀 형식으로 정의된 문제입니다.
//정점 정의
function Vertex(id){
var Stem={}
Stem.id=id
Stem.adjacent; =[];
줄기 반환
}
//그래프 정의
function Graph(){
var Stem={}, vertices={}> //추가 그래프에 꼭짓점
function add(vertex){
if (vertex instanceof Array){
for (var i=0, v=vertex; i
그래프에
함수 addIds(ids){
var id
for (var i=0; i
vertices[id]=Vertex(id) , v2=vertices[i2]
if (v1 && v2){
v1. 인접.push(v2);
v2.adjacent.push(v1);
}
}
줄기.vertices=vertices;
줄기.추가
addIds=addIds;
줄기.connect=connect;
줄기 반환
}
//정점 정의
function Vertex(id){
var Stem={};
stem.id=id;
stem.adjacent=[];
return 줄기 ;
}
//그래프 정의
function Graph(){
var Stem={}, vertices={};
//그래프에 정점 추가
function add (정점){
if (배열의 정점 인스턴스){
for (var i=0, v=vertex; i
}
}
vertices[vertex.id]=vertex;
}
//ID에서 정점을 생성하여 그래프에 추가
함수 addIds( ids){
var id;
for (var i=0; i
vertices[id]=Vertex(id) ;
}
}
//두 정점 사이에 가장자리 생성
function connect(i1, i2){
var v1=vertices[i1], v2=vertices[i2];
if (v1 && v2){
v1.adjacent.push(v2);
v2.adjacent.push(v1);
}
}
stem.vertices=vertices;
stem.add=add;
stem.addIds=addIds;
stem.connect=connect;
return 줄기;
}我们走take迷宫的思路是从入口开始,遍历每个매우 유용합니다.到过的点,如果再次遇上,则返回上一个点。如果遇到到个,则退流整个遍历,返回到入口,途中记录经过的每个点,并最终写到到到个遍历,返回到入mouth, 这不是一个최고의 전략, 得到的结果未必是最短的路线,但是只要入口和入口之间是连communication,就一定可以找到一条路线。
[javascript]
//미로에서 빠져나와 결과를 인쇄해 보세요.
함수 walkOut( 항목, 종료){
var 방문 = [], 경로 = [];
function walk(vertex){
if (vertex === exit) {//exit 찾기
path.push(vertex);
true를 반환합니다.
}
if (visited.indexOf(vertex) > -1) {//정점을 방문했습니다.
return false;
}
Visit.push(vertex);//각 꼭짓점 기억
var linked = vertex.adjacent;
var 길이 = 연결됨.길이;
if (length === 0) {//꼭지점이 격리됨
return false;
}
for (var i = 0; i < length; i++) {
if (walk(connected[i])) {//인접한 각 꼭짓점을 시도합니다.
path.push(vertex );
true를 반환합니다.
}
}
}
function printPath(){
varfootprint = '';
var 길이 = 경로.길이;
for (var i = length - 1; i > -1; i--) {
공간 += path[i].id;
발자국 += i === 0 ? '' : ' > ';
}
print(발자국);
}
if (walk(entry)) {
printPath();
}
else {
print('출불去!');
}
}
//미로에서 빠져나와 결과 인쇄
function walkOut(entry, exit){
var Visited = [], path = [];
function walk( vertex){
if (vertex === exit) {//출구 찾기
path.push(vertex);
return true;
}
if (visited.indexOf(vertex ) > -1) {//정점을 방문했습니다
return false;
}
Visited.push(vertex);//각 정점을 기억합니다
var linked = vertex.adjacent;
var length = linked.length;
if (length === 0) {//정점은 격리됩니다
return false;
}
for (var i = 0; i < length ; i++) {
if (walk(connected[i])) {//인접한 각 정점 시도
path.push(vertex);
return true;
}
}
}
function printPath(){
varfootprint = '';
var length = path.length;
for (var i = length - 1; i > -1; i--) {
발자국 += path[i].id;
발자국 += i === 0 ? '' : ' > ';
}
print(footprint);
}
if (walk(entry)) {
printPath();
}
else {
print('出不去!');
}
}我们可以试验一下这段代码走迷宫的能力。
[javascript]
function testMaze(){
var g=Graph();
g.addIds([1, 2, 3, 4, 5, 6]);
g.connect(1, 2);
g.connect(1, 3);
g.connect(1, 4);
g.connect(2, 3);
g.connect(3, 5); //你可以画ude这个图
walkOut(g.vertices[1], g.vertices[5]);//1 > 2 > 3 > 5
walkOut(g.vertices[1], g.vertices[6]);//출포불가!
walkOut(g.vertices[2], g.vertices[5]);//2 > 1 > 3 > 5
}
function testMaze(){
var g=Graph();
g.addIds([1, 2, 3, 4, 5, 6]);
g.connect(1, 2);
g.connect(1, 3);
g.connect(1, 4);
g.connect(2, 3);
g .connect(3, 5); //你可以画ude这个图
walkOut(g.vertices[1], g.vertices[5]);//1 > 2 > 3 > 5
walkOut(g.vertices[1], g.vertices[6]);//출금 불가능!
walkOut(g.vertices[2], g.vertices[5]);//2 > 1 > 3 > 5
}지금은 现实生活中, 我们当然也可以用这种笨办法走任何一个可能走仫宫, 只要你用笔和便签纸에서 每一个岔路口记下你选择的路线。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

동일한 ID로 배열 요소를 JavaScript의 하나의 객체로 병합하는 방법은 무엇입니까? 데이터를 처리 할 때 종종 동일한 ID를 가질 필요가 있습니다 ...

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.
