Algoritmo recursivo y ejemplos comunes (C++, implementación de Python)

Algoritmo recursivo y ejemplos comunes (C++, implementación de Python)

El algoritmo recursivo es un método para describir problemas complejos con varios pasos de operaciones repetibles y es un algoritmo comúnmente utilizado en el cálculo de secuencias. El valor de un elemento específico en una secuencia generalmente se obtiene evaluando algunos elementos anteriores. La idea es transformar un proceso de cálculo complejo y enorme en múltiples repeticiones de un proceso simple. El algoritmo aprovecha las características rápidas e incansables de las computadoras. Una relación de recurrencia suele expresarse como una fórmula de recurrencia.

A continuación se muestran algunos ejemplos comunes.

★Secuencia de Fibonacci: La secuencia de Fibonacci se refiere a dicha secuencia: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...

Esta secuencia comienza con el tercer término y cada término es igual a la suma de los dos términos anteriores.

La secuencia de Fibonacci es un problema de recursividad clásico, su definición es: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2). Mediante esta relación de recurrencia, se puede resolver el enésimo término de la secuencia de Fibonacci.

☆Implementación de C++:

#include <iostream>  
using namespace std;  

int main() {  
    int n;  
    cout << "请输入项数 n 的值: ";  
    cin >> n; 
	
	if (n <= 1) {  
        return n;  
    }  
    int f1 = 0, f2 = 1, fn;  
    for (int i = 2; i <= n; i++) {  
        fn = f1 + f2;  
        f1 = f2;  
        f2 = fn;  
    }  
    
    cout << "斐波那契数列的第 " << n << " 项为:" << fn << endl;  
    return 0;  
}

En su lugar, utilice una función personalizada para implementar:

#include <iostream>  
using namespace std;  
  
int fibonacci(int n) {  
    if (n <= 1) {  
        return n;  
    }  
    int f1 = 0, f2 = 1, fn;  
    for (int i = 2; i <= n; i++) {  
        fn = f1 + f2;  
        f1 = f2;  
        f2 = fn;  
    }  
    return fn;  
}  
  
int main() {  
    int n;  
    cout << "请输入项数 n 的值: ";  
    cin >> n;  
    cout << "斐波那契数列的第 " << n << " 项为:" << fibonacci(n) << endl;  
    return 0;  
}

☆Implementación de Python:

n = int(input("请输入 n 的值:"))
if n <= 1:  
    fn = n

f1, f2 = 0, 1 

for i in range(2, n+1):  
    fn = f1 + f2  
    f1, f2 = f2, fn
        
print("斐波那契数列的第 {} 项为:{}".format(n, fn))

En su lugar, utilice una función personalizada para implementar:

def fibonacci(n):  
    if n <= 1:  
        return n
  
    f1, f2 = 0, 1 
 
    for i in range(2, n+1):  
        fn = f1 + f2  
        f1, f2 = f2, fn  
    return fn  

n = int(input("请输入 n 的值:"))  
print("斐波那契数列的第 {} 项为:{}".format(n, fibonacci(n)))

★Suma de secuencia aritmética: 1, 3, 5, 7, 9 es una secuencia aritmética con una tolerancia de 2. El problema de suma de secuencias aritméticas se puede resolver mediante un algoritmo recursivo. Sea el primer elemento de la secuencia aritmética a1, la tolerancia sea d y el enésimo elemento sea an, entonces an=a1+(n-1)d. La suma de los primeros n elementos de la secuencia aritmética es necesaria y se puede obtener mediante recursividad: Sn=a1+a2+...+an=n/2[2a1+(n-1)d].

☆Implementación de C++:

#include <iostream>  
using namespace std;

int main() {  
    int a1, d, n;  
    cout << "输入第一项、公差和项数:";  
    cin >> a1 >> d >> n;  
    int sum = 0;  
    for (int i = 1; i <= n; i++) {  
        sum += a1 + (i - 1) * d;  
    }  
    cout << "等差数列的前 " << n << " 项和为:" << sum << endl;  
    return 0;  
}

☆Implementación de Python:

a1 = int(input("输入第一项: "))  
d = int(input("输入公差: "))  
n = int(input("输入项数: "))  
sum = 0  
for i in range(1, n+1):  
    sum += a1 + (i - 1) * d
    
print("等差数列的前 {} 项和为:{}".format(n,sum))

★Suma de secuencia geométrica: 1, 2, 4, 8, 16 es una secuencia geométrica cuya razón común es 2. El problema de suma de secuencias geométricas también se puede resolver mediante un algoritmo recursivo. Supongamos que el primer término de la secuencia geométrica es a1, la razón común es r y el enésimo término es an, entonces an=a1r^(n-1). Para requerir la suma de los primeros n términos de una secuencia geométrica, podemos obtenerla de forma recursiva: Sn=a1(1-r^n)/(1-r).

☆Implementación de C++:

#include <iostream>
#include <cmath> // 引入 pow()
using namespace std;

int main() {    
    double a1, r, n;    
    cout << "输入第一项、公比和项数:";    
    cin >> a1 >> r >> n;    
    double sum = 0;    
    for (int i = 1; i <= n; i++) {    
        sum += a1 * pow(r, i - 1);    
    }    
    cout << "等比数列的前 " << n << " 项和为:" << sum << endl;    
    return 0;    
}

☆Implementación de Python:

a1 = float(input("输入第一项:"))  
r = float(input("输入公比:"))  
n = int(input("输入项数:"))  
  
sum = 0  
for i in range(1, n + 1):  
    sum += a1 * (r ** (i - 1))  
  
print("等比数列的前 {} 项和为:{}".format(n, sum))

Adjunto , la diferencia entre recursividad, recursividad e iteración

La recursividad consiste en calcular otros elementos a partir de elementos de secuencia conocidos, la recursividad es una función que se llama a sí misma y la iteración resuelve un problema realizando operaciones repetidamente.

La recursividad y la iteración se pueden encontrar en: https://blog.csdn.net/cnds123/article/details/132409886

Supongo que te gusta

Origin blog.csdn.net/cnds123/article/details/132775435
Recomendado
Clasificación