Ciao a tutti sono alle prese con un algoritmo che utilizza la ricorsione per invertire gli elementi di uno stack in place, ovvero senza utilizzare altre strutture di appoggio. Ho scritto un codice che, testato, pare abbia l'unico problema che non "scarica" gli elementi salvati nella variabile temp in fase di Push. L'lagoritmo è semplificato, indico le semplificazioni in testa al programma. Qualcuno ha qualche idea?

codice:
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

   Nome File: Inverti_Stack_Ricorsione.c

   Funzionalità:
		L'algoritmo Inverte i valori presenti nello stack utilizzando la
		ricorsione.

		Semplificazione: Implemento lo Stack come Vettore ed effettuo le
		operazioni su di esso direttamente in questo algoritmo, andrebbe diviso

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

#include <stdio.h>

void Inverti(int S[],int Elem,int Dim,int Flag,int Top,int ToBotto,int temp);

int main(int argc, char *argv[])
{

   int Stack[64];
   int i=0;
   int n;
   int Top=0;

   int c;

   printf("Quanti Numeri Vuoi Inserire?");
   c=getch();

   c=c-'0';

    do{
    printf("\n\nInserire Un Elemento da Tastiera ");
    n=getch();

    n=n-'0';

    printf("%i",n);

    Stack[i]=n;
    i++;
    }while(i<c);

    Top=i-1;

    printf("\n\n\n");

    for(i=0;i<=Top;i++) printf("%i\t",Stack[i]);

    printf("\n\n\n");

    Inverti(Stack,Top,Top,0,Top,0,0);

    printf("\n\n\n");

    for(i=0;i<=Top;i++) printf("%i\t",Stack[i]);

    fflush(stdin);
    printf("Premere Un Tasto Per Uscire...\n");
  	_getch();
  	return 0;

}

void Inverti(int S[],int Elem,int Dim,int Flag,int Top,int ToBottom,int temp)
{
	printf("\n\nDentro inverti\n");
	system("pause");
	printf("\n\nVariabili In Testa Alla Funzione: \n");
	printf("Elem %i, Dim %i,Flag %i, Top %i, Stack[Top] %i, ToBottom %i\n\n",Elem,Dim,Flag,Top,S[Top],ToBottom);
	if(Top>=Dim-Elem && Flag==0)
	{
		if(Dim==Top) ToBottom=S[Top];


		else{
			temp=S[Top];
			printf("S[Top] Pop %i\n\n",temp);
			system("pause");
		}

		Inverti(S,Elem,Dim,Flag,Top-1,ToBottom,temp);
	}

	else if(Elem>=0)
	{
		Flag=1;
		if(Top==-1) Top=0;

		if(Top==Dim-Elem)
		{
			 S[Top]=ToBottom;
			 printf("S[Top] ToBottom %i\n\n",S[Top]);
			 system("pause");
			}
			else if(Top<=Dim)
			{
				S[Top]=temp;
				printf("S[Top] Inserito %i\n\n",S[Top]);
			   system("pause");
			   if(Top==Dim) Top--;
				}
			else
			{
				Flag=0;
				Elem--;
				Top--;
				int i;
				for(i=0;i<=Top;i++) printf("%i\t",S[i]);
			}
		Inverti(S,Elem,Dim,Flag,Top+1,ToBottom,temp);
		}
	}