Heim Backend-Entwicklung PHP-Tutorial 递归的优缺点是什么?

递归的优缺点是什么?

Jun 13, 2016 am 11:05 AM
递归

递归的优缺点有:1、代码更简洁清晰,可读性更好;2、时间和空间消耗比较大;3、很多计算都是重复的;4、调用栈可能会溢出。

递归的优缺点是什么?

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。

 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

递归的优缺点

优点:代码更简洁清晰,可读性更好

递归的话函数调用是有开销的,而且递归的次数受堆栈大小的限制。

缺点:

时间和空间消耗比较大。每一次函数调用都需要在内存栈中分配空间以保存参数,返回地址以及临时变量,而且往栈里面压入数据和弹出都需要时间。

另外递归会有重复的计算。递归本质是把一个问题分解为多个问题,如果这多个问题存在重复计算,有时候会随着n成指数增长。斐波那契的递归就是一个例子。

递归还有栈溢出的问题,每个进程的栈容量是有限的。由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

更多相关知识,请访问 PHP中文网!!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe? Apr 23, 2024 am 09:30 AM

Rekursive Implementierung von C++-Funktionen: Gibt es eine Grenze für die Rekursionstiefe?

Unterstützen C++-Lambda-Ausdrücke die Rekursion? Unterstützen C++-Lambda-Ausdrücke die Rekursion? Apr 17, 2024 pm 09:06 PM

Unterstützen C++-Lambda-Ausdrücke die Rekursion?

Rekursives Programm zum Ermitteln minimaler und maximaler Elemente eines Arrays in C++ Rekursives Programm zum Ermitteln minimaler und maximaler Elemente eines Arrays in C++ Aug 31, 2023 pm 07:37 PM

Rekursives Programm zum Ermitteln minimaler und maximaler Elemente eines Arrays in C++

Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java Sep 17, 2023 pm 07:49 PM

Zählen Sie rekursiv die Anzahl der Vorkommen eines Teilstrings in Java

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen? Apr 22, 2024 pm 03:18 PM

Rekursive Implementierung von C++-Funktionen: Vergleichende Analyse rekursiver und nichtrekursiver Algorithmen?

Wie kann der maximale Rekursionstiefenfehler von Python behoben werden? Wie kann der maximale Rekursionstiefenfehler von Python behoben werden? Jun 24, 2023 pm 02:48 PM

Wie kann der maximale Rekursionstiefenfehler von Python behoben werden?

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung Apr 30, 2024 am 10:30 AM

Detaillierte Erläuterung der C++-Funktionsrekursion: Anwendung der Rekursion bei der Zeichenfolgenverarbeitung

Ein Anfängerleitfaden zur C++-Rekursion: Grundlagen schaffen und Intuition entwickeln Ein Anfängerleitfaden zur C++-Rekursion: Grundlagen schaffen und Intuition entwickeln May 01, 2024 pm 05:36 PM

Ein Anfängerleitfaden zur C++-Rekursion: Grundlagen schaffen und Intuition entwickeln

See all articles