8.1 Pregunta E: [Introducción a la recursividad] Estadísticas de secuencias pop

Descripción del Título

La pila es una estructura de datos de uso común. Hay n para hacer que el elemento espere en el lado superior de la pila para ser empujado dentro de la pila, y el otro lado de la parte superior de la pila es la secuencia pop. Ya sabes que hay dos operaciones de pila: empujar y hacer estallar. La primera es empujar un elemento a la pila y la última es hacer estallar el elemento superior de la pila. Ahora, para usar estas dos operaciones, se puede obtener una serie de secuencias de salida a partir de una secuencia de operaciones. Programe para encontrar un n dado, calcule y genere el número total de secuencias de salida que pueden obtenerse de la secuencia de operandos 1, 2, ..., n, después de una serie de operaciones.
 

ingresar

Un número entero n (1 <= n <= 15) 

Producción

Un entero, el número total de posibles secuencias de salida.

Copia de entrada de muestra

3

Copia de salida de muestra

5

inmediato

Primero, comprenda las dos operaciones básicas de la pila. Empujar es colocar elementos en la parte superior de la pila, el puntero en la parte superior de la pila se mueve hacia arriba en uno y la cola de espera también se mueve hacia arriba en uno. es colocar el elemento en la parte superior de la pila y, al mismo tiempo, la pila. El puntero superior se mueve hacia abajo un lugar. 
Utilice un proceso para simular el proceso de entrada y salida de la pila, y el retroceso se puede lograr mediante un bucle y una recursividad: repita este proceso, si se puede insertar en la pila, luego se ingresa un elemento, si se puede extraer, entonces un elemento está fuera. Solo intente uno por uno y cuente una vez cuando el número de elementos emergentes alcance n (esta es también la condición para el final de la llamada recursiva). 

#include <iostream>
#include <cstdio>
using namespace std;
int n,ans;
void dfs(int in,int out)
{
    if(out==0) ans++;
    else if(in==0){
        dfs(in+1,out-1);//进栈
    }
    else{
        dfs(in+1,out-1);//进栈
        dfs(in-1,out);//出栈
    }
 
}
int main()
{
    while(scanf("%d",&n)!=EOF){
        ans=0;
        dfs(0,n);
        printf("%d\n",ans);
    }
    return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/wangws_sb/article/details/114931159
Recomendado
Clasificación