ciao
sto facendo pratica sulla ricorsione , un argomento che proprio non mi va giù

avendo scritto un algoritmo iterativo


codice:
=========
int main ()
{
  int a ; /* base */
  int n ; /* limite */
  int i ; /* contatore */
  int j ; /*  contatore */
  int sommatoria = 0 ;
  int potenza  ;

  printf (" inserisci la base \n \n" ) ;
  scanf ("%d" , &a ) ;

  printf (" inserisci il limite \n \n" ) ;
  scanf  ("%d" , &n ) ;


  for ( i = 0 ; i <= n ; i++ )
  {
	
	  
	  for ( j = 0 ; j < 1 ; j++ )
  {
	  if ( i == 0 )
		  potenza = 1 ;

	  else
	  potenza *= a ;
	  
	  
  }

	  sommatoria  += potenza  ;

  }


  printf ("potenza is %d \n \n " , potenza ) ;
  printf (" la sommatoria e %d \n\n" , sommatoria ) ;

=======================
ne ho scritto un equivalente ricorsivo con qualche dubbio

codice:
int ricSomma ( int n , int lim)

{
	if ( lim == 0 )
		return 1 ;

	else
		return 1+ n * ricSomma ( n , lim - 1 )   ;

}

nella chiamata ricorsiva della funzione ricSomma ho specificato casualmente "+ 1 "
ora la mia domanda è :
che cosa restituisce la funzione a ogni chiamata ricorsiva ?
qual'è la sequenza di attivazione nello stack?

ad es il fattoriale di 5! calcolato in modo ricorsivo restituirebbe

5 * 4!
4 * 3!
3 * 2!
2 * 1!
1


1*2
3*2
4*6
5*24
= 120


nel caso della mia funzione però c'è un pezzo che mi manca alla comprensione!
mi potreste aiutare ?
grazie