Java에서 재귀와 반복의 차이점은 무엇입니까?
1. 재귀와 반복의 차이점
엔티티가
자신을 호출
하는 경우 해당 프로그램을recursive
라고 합니다.调用自身
时,程序称为递归
。当存在
循环(或重复)
时,程序称为迭代调用
。示例:求一个数的阶乘的程序
时间复杂度比较
查找递归的时间复杂度比迭代更难。
递归
:递归的时间复杂度可以通过根据先前的调用找到第 n 次递归调用的值来找到。因此,根据基本情况找到目标情况,并根据基本情况求解,可以让我们了解递归方程的时间复杂度。迭代
:迭代的时间复杂度可以通过找到循环内重复的循环数来找到。
用法比较
使用这些技术中的任何一种都是时间复杂度和代码大小之间的权衡。
如果时间复杂度是重点,递归调用的次数会很大,那么最好使用迭代。
但是,如果时间复杂度不是问题而代码的短小是问题,那么递归将是可行的方法。
递归:递归涉及再次调用相同的函数,因此代码长度非常短。然而,正如我们在分析中看到的那样,当递归调用数量相当多时,递归的时间复杂度可能会呈指数级增长。因此,递归的使用在更短的代码中是有利的,但时间复杂度更高。
迭代:迭代是代码块的重复。这涉及较大的代码量,但时间复杂度通常低于递归。
开销
与迭代相比,递归有大量的开销。
递归
:递归有函数重复调用的开销,即由于重复调用同一个函数
,代码的时间复杂度增加了很多倍
。迭代
:迭代不涉及任何此类开销。
无限重复
递归
中的 Infinite Repetition 会导致 CPU crash,但在迭代中,当内存耗尽时它会停止。递归
:在Recursion中,由于指定的基本条件错误,可能会出现无限递归调用,在永远不会为假的情况下,不断调用函数,这可能会导致系统CPU崩溃。迭代
루프(또는 반복)
가 있는 경우 해당 프로그램을 반복 호출
이라고 합니다. 예: 숫자의 계승을 찾는 프로그램 |
시간 복잡도 비교 | |
---|---|---|
사용법 비교 | 이러한 기술을 사용하는 것은 시간 복잡성과 코드 크기 간의 절충안입니다. | |
시간 복잡도가 중요하고 재귀 호출 수가 많을 경우 반복을 사용하는 것이 가장 좋습니다. | 그러나 시간 복잡성이 문제가 되지 않고 코드가 짧다면 재귀를 사용하는 것이 좋습니다. | |
재귀: 재귀에는 동일한 함수를 다시 호출하는 작업이 포함되므로 코드 길이가 매우 짧습니다. 그러나 분석에서 보았듯이 재귀 호출 수가 많을수록 재귀의 시간 복잡도는 기하급수적으로 증가할 수 있습니다. 따라서 재귀를 사용하는 것은 코드가 짧을수록 유리하지만 시간 복잡도는 더 높습니다. | 반복: 반복은 코드 블록의 반복입니다. 여기에는 더 많은 양의 코드가 포함되지만 시간 복잡도는 일반적으로 재귀보다 낮습니다. | |
오버헤드 | 반복에 비해 재귀에는 오버헤드가 많습니다. | |
무한 반복 | ||
iterative | ||
함수 자체를 호출합니다. | 반복적으로 실행되는 일련의 명령입니다. | |
기능을 확인하세요. | For 루프. |
기본 사례를 통해 여기서는 함수 호출이 없습니다.
🎜반복자의 종료 조건이 더 이상 충족되지 않는 경우. 🎜🎜🎜🎜Usage🎜🎜코드 크기가 작아야 하고 시간 복잡성이 문제가 되지 않을 때 사용하세요. 🎜🎜시간 복잡도를 확장된 코드 크기와 균형을 맞춰야 할 때 사용하세요. 🎜🎜🎜🎜코드 크기 🎜🎜더 적은 코드 🎜🎜더 많은 코드 🎜🎜🎜🎜시간 복잡도 🎜🎜매우 높은(보통 기하급수적) 시간 복잡도. 🎜🎜시간 복잡도는 상대적으로 낮습니다(일반적으로 다항식 로그). 🎜🎜🎜🎜공간 복잡도🎜🎜공간 복잡도가 반복보다 높습니다. 🎜🎜공간 복잡도가 낮습니다. 🎜🎜🎜🎜Heap🎜🎜여기의 스택은 함수가 호출될 때 지역 변수를 저장하는 데 사용됩니다. 🎜🎜스택을 사용하지 않습니다. 🎜🎜🎜🎜Speed🎜🎜스택을 유지하고 업데이트하는 오버헤드가 있기 때문에 실행이 느립니다. 🎜🎜일반적으로 스택을 사용하지 않기 때문에 재귀보다 빠릅니다. 🎜🎜🎜🎜Storage🎜🎜재귀는 반복에 비해 더 많은 메모리를 사용합니다. 🎜🎜반복에 함수 호출이 없으므로 오버헤드가 없습니다. 🎜🎜🎜🎜Elevated🎜🎜에는 반복되는 함수 호출로 인한 오버헤드가 있습니다. 🎜🎜반복에 함수 호출이 없으므로 오버헤드가 없습니다. 🎜🎜🎜🎜무한 반복🎜🎜재귀 함수가 종료 조건을 만족하지 않거나 정의되지 않았거나 기본 사례에 도달하지 못한 경우 스택 오버플로 오류가 발생하고 시스템이 무한 재귀에서 충돌할 수 있습니다. 🎜🎜반복문의 제어 조건이 절대 false가 아니거나 제어 변수가 최종 값에 도달하지 않으면 무한 루프가 발생합니다. 무한 루프에서는 CPU 사이클을 계속해서 사용합니다. 🎜🎜🎜🎜🎜2.코드🎜public class Test { // ----- 递归 ----- // 求给定数的阶乘的方法 static int factorialUsingRecursion(int n) { if (n == 0) return 1; // 递归呼叫 return n * factorialUsingRecursion(n - 1); } // -----迭代 ----- //求给定数的阶乘的方法 static int factorialUsingIteration(int n) { int res = 1, i; // 迭代 for (i = 2; i <= n; i++) res *= i; return res; } public static void main(String[] args) { int num = 5; System.out.println("Factorial of " + num + " using Recursion is: " + factorialUsingRecursion(5)); System.out.println("Factorial of " + num + " using Iteration is: " + factorialUsingIteration(5)); } }
Factorial of 5 using Recursion is: 120 Factorial of 5 using Iteration is: 120
위 내용은 Java에서 재귀와 반복의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 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)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

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

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

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

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

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

Java는 초보자와 숙련된 개발자 모두가 배울 수 있는 인기 있는 프로그래밍 언어입니다. 이 튜토리얼은 기본 개념부터 시작하여 고급 주제를 통해 진행됩니다. Java Development Kit를 설치한 후 간단한 "Hello, World!" 프로그램을 작성하여 프로그래밍을 연습할 수 있습니다. 코드를 이해한 후 명령 프롬프트를 사용하여 프로그램을 컴파일하고 실행하면 "Hello, World!"가 콘솔에 출력됩니다. Java를 배우면 프로그래밍 여정이 시작되고, 숙달이 깊어짐에 따라 더 복잡한 애플리케이션을 만들 수 있습니다.
