Java를 사용하여 하노이 타워 문제를 분석하는 방법
1. 하노이 탑 문제의 근원
하노이 탑이라고도 알려진 하노이 탑은 고대 인도 전설에 유래하는 교육용 장난감입니다. 브라흐마는 세상을 창조했을 때 세 개의 다이아몬드 기둥을 만들었고, 한 기둥에는 64개의 금 원반이 아래에서 위로 크기대로 쌓여 있었습니다. 브라흐마는 브라만에게 디스크를 바닥부터 크기 순서대로 다른 기둥에 재배치하라고 명령했습니다. 그리고 작은 원반에서는 원반을 확대할 수 없으며 세 개의 기둥 사이에서 한 번에 하나의 원반만 이동할 수 있다고 규정되어 있습니다
2. 문제 분석
간단한 질문으로 시작
생각만 하면 됩니다. 접시 64개, 어려울 수 있습니다. 아래와 같이 접시 1개부터 시작할 수 있습니다.
접시 1개
A -> C
접시 1개만 있으면 A를 바로 접시에 놓을 수 있습니다. 기둥 접시가 C 기둥으로 이동되었습니다
한 번 이동해야 합니다
두 개의 접시
두 개의 접시가 있는 경우 다음과 같은 방법으로도 얻을 수 있습니다.
A -> C B-> C
3번 이동해야 합니다
1. A -> B
2.
3개 접시
A -> B C -> C B -> A B -> C
총 7번의 이동이 필요합니다. .A ->C
2.A ->B
3.C ->A ->6. B -> 알았어 3개의 접시 이동
4개의 접시가 있으면 이 문제는 실제로 매우 복잡합니다
2개 접시 3번 이동
접시 3개를 7번 이동하세요
......
3. 문제 해결
우리는 할 수 있습니다. 재귀를 통해 이 문제를 해결하고 올바른 이동 방법을 얻으세요.
N개의 접시가 있으면 어떻게 이동하나요?
코드 업로드
public static void hanoi(int num, String src, String help, String dest) { if (num == 1) { // 只有一个盘子的时候直接移动 System.out.print(src + "->" + dest + " "); // 将一个盘子从源柱子挪到目标柱子 } else { hanoi(num - 1, src, dest, help); // 将n - 1个盘子从源柱子借助目标柱子挪到辅助柱子 System.out.print(src + "->" + dest + " "); // 将一个盘子从源柱子挪到目标柱子 hanoi(num - 1, help, src, dest); // 将辅助柱子上n - 1个盘子借助源柱子挪到目标柱子 } } public static void main(String[] args) { hanoi(3, "A", "B", "C"); }
이 코드에서 src가 소스입니다 기둥, help는 보조 기둥이고 dest는 대상 기둥입니다.
이것은 양방향 재귀입니다
이로써 판의 움직임이 성공적으로 완료되었습니다
4. 브라마의 임무
64개의 접시를 옮기는 데 시간이 얼마나 걸립니까?
브라만은 매우 똑똑해서 생각하지 않고도 올바른 이동 방법을 직접 알 수 있다고 가정합니다. 접시를 옮기고 계속 움직이는 데 1초가 걸립니다.
2^64 - 1초를 1년으로 환산하면 약 584942417355년(5849억4200만년) 정도 되는데, 지구는 겨우 45억년 동안 존재했고, 태양계의 예상 수명은 수백억년이라고 한다. 연령. 정말 5,849억 4,200만 년이 지났습니다. 태양계와 은하수는 말할 것도 없고, 적어도 바티칸 타워, 사원 등 지구상의 모든 생명체가 멸종된 지 오래입니다.
관련 예언
이것이 완성되면 우주가 순식간에 멸망할 것이라는 예언이 있습니다. 어떤 사람들은 브라민들이 여전히 디스크를 계속 움직이고 있다고 믿고 있습니다
컴퓨터가 64개의 판을 옮기는 데 얼마나 걸리나요?
내 컴퓨터의 핵심주파수는 2.90GHz로 초당 29억번의 연산을 하므로 2^64-1번 이동하는데 걸리는 시간은 약 201년이다
위 내용은 Java를 사용하여 하노이 타워 문제를 분석하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.
