Einführung in Rekursion und Iteration und allgemeine Beispiele (Implementierung in C++ und Python)

Einführung in Rekursion und Iteration und allgemeine Beispiele (Implementierung in C++ und Python)

Der Kerngedanke der Rekursion lässt sich tatsächlich als „Teile und herrsche“ zusammenfassen. Rekursion ist normalerweise am effektivsten, wenn das Problem deutlich selbstähnlich ist und effizient in kleinere Teilprobleme zerlegt werden kann. Wenn ein Problem nicht effizient zerlegt werden kann oder es viele Überschneidungen zwischen Teilproblemen gibt, ist die Verwendung der Rekursion möglicherweise nicht die beste Lösung.

Rekursive Funktionen erfordern normalerweise eine „Beendigungsbedingung“, um anzugeben, wann die Rekursion beendet werden soll. Wenn sich die Funktion selbst aufruft, sollten die Argumente jedes Mal ein überschaubarer kleinerer Datensatz sein, damit die „Abbruchbedingung“ schrittweise erreicht werden kann.

Jedes rekursive Problem kann theoretisch durch Iteration gelöst werden und umgekehrt. Dies liegt daran, dass sowohl Rekursion als auch Iteration Programmiertechniken sind, die zur Lösung von Problemen verwendet werden, die wiederholte Vorgänge erfordern, ihre Implementierung und Effizienz jedoch unterschiedlich sein können.

Iterative Algorithmen nähern sich schrittweise einer Lösung eines Problems, indem sie wiederholt eine Reihe von Operationen ausführen. Jede Iteration des Prozesses wird als „Iteration“ bezeichnet. Bei Programmiertechniken wird eine Reihe von Anweisungen wiederholt ausgeführt, bis eine bestimmte Bedingung erfüllt ist. Iteration wird normalerweise durch Schleifenstrukturen wie for-Schleifen oder while-Schleifen implementiert.

Hier sind einige Beispiele für die Verwendung rekursiver Funktionen.

1. Berechnen Sie die Summe der ganzen Zahlen von 1 bis n .

★Rekursiver Algorithmus implementiert in C++:

#include <iostream>
using namespace std; 

int recursiveSum(int n) {
    if (n == 0) { // 终止条件
        return 0;
    } else {
        return n + recursiveSum(n - 1); // 递归调用
    }
}

int main() {
    int n;
    cout << "请输入一个正整数: ";
    cin >> n;
    
    int sum = recursiveSum(n); // 调用递归函数计算和
    
    cout << "从1到" << n << "的所有整数的和为: " << sum << endl;
    
    return 0;
}

★Rekursiver Algorithmus implementiert Code in Python:

def recursiveSum(n):
    if n == 0:
        return 0
    else:
        return n + recursiveSum(n - 1); # 递归调用

n = int(input("请输入一个正整数: "))
sum = recursiveSum(n)  # 调用递归函数计算和

print(f"从1到{n}的所有整数的和为: {sum}")  

★In C++ implementierter iterativer Algorithmus:

#include <iostream>
using namespace std; 

int iterativeSum(int n) {
    int sum = 0;
    for(int i = 1; i <= n; i++) {
        sum += i;
    }
    return sum;
}

int main() {
    int n;
    cout << "请输入一个正整数: ";
    cin >> n;
    
    int sum = iterativeSum(n); // 调用递归函数计算和
    
    cout << "从1到" << n << "的所有整数的和为: " << sum << endl;
    
    return 0;
}

★In Python implementierter iterativer Algorithmus:

def iterativeSum(n):
    result = 0
    while n > 0:
        result += n
        n -= 1
    return result

n = int(input("请输入一个正整数: "))
sum = iterativeSum (n)  # 调用递归函数计算和

print(f"从1到{n}的所有整数的和为: {sum}")  

2. Berechnen Sie die Fakultät

Fakultät:

Die Fakultät ist das Ergebnis der Multiplikation einer positiven ganzen Zahl n und aller positiven ganzen Zahlen kleiner oder gleich n. Symbole werden üblicherweise durch das Symbol „!“ dargestellt. Beispielsweise wird die Fakultät von 5 als 5! ausgedrückt und die Berechnungsformel lautet: 5! = 5 × 4 × 3 × 2 × 1 = 120. Fakultäten können rekursiv oder iterativ berechnet werden.

★Rekursiver Algorithmus implementiert in C++ (Schlüsselcode):

int factorial(int n) {
    if (n == 0) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

In diesem Beispiel berechnet die Funktion „factorial(n)“ die Fakultät von n, indem sie sich selbst rekursiv aufruft. Der Basisfall ist n == 0, an diesem Punkt gibt die Funktion 1 zurück. Im rekursiven Fall gibt die Funktion n * Fakultät(n - 1) zurück, was der Definition der Fakultät von n entspricht.

★Rekursive Implementierung in Python (Schlüsselcode):

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

★Der iterative Algorithmus ist in C++ implementiert (Schlüsselcode):

int factorial(int n) {
    int result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

★Der iterative Algorithmus ist in Python implementiert (Schlüsselcode):

def factorial_iterative(n):
    result = 1
    for i in range(1, n+1):
        result *= i
    return result

3. Berechnen Sie die Fibonacci-Folge

Fibonacci-Folge:

Die Fibonacci-Folge beginnt bei 0 und 1 und jeder nachfolgende Term ist die Summe der beiden vorherigen. Mit anderen Worten, die n-te Fibonacci-Zahl ist gleich der Summe der n-1. Fibonacci-Zahl und der n-2. Fibonacci-Zahl. Die ersten paar Zahlen in der Fibonacci-Folge sind: 0, 1, 1, 2, 3, 5, 8, 13, 21, .... Die Fibonacci-Folge kann rekursiv oder iterativ generiert werden.

★Rekursiver Algorithmus implementiert in C++ (Schlüsselcode):

int fibonacci(int n) {
    if (n <= 1) {
        return n;
    } else {
        return fibonacci(n - 1) + fibonacci(n - 2);
    }
}

In diesem Beispiel berechnet die Funktion fibonacci(n) den n-ten Term der Fibonacci-Folge, indem sie sich selbst rekursiv aufruft. Die Grundsituation ist n <= 1, in diesem Fall gibt die Funktion n zurück. Im rekursiven Fall gibt die Funktion fibonacci(n – 1) + fibonacci(n – 2) zurück, was die Definition der Fibonacci-Folge ist.

★Rekursiver Algorithmus in Python implementiert (Schlüsselcode) :

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

★Der iterative Algorithmus ist in C++ implementiert (Schlüsselcode):

int fibonacci(int n) {
    if (n <= 0) {
        return n;
    } else {
        int a = 0, b = 1, c;
        for (int i = 2; i <= n; i++) {
            c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
}

★Der iterative Algorithmus ist in Python implementiert (Schlüsselcode):

def fibonacci(n):
    if n <= 0:
        return n
    else:
        a, b = 0, 1
        for _ in range(2, n + 1):
            a, b = b, a + b
        return b

Ich denke du magst

Origin blog.csdn.net/cnds123/article/details/132409886
Empfohlen
Rangfolge