Recursividad: Sumatoria Recursiva de un array en C

Posted on Miércoles, mayo 5th, 2010 at 13:07

Para hacer una función recursiva en c. solo tenemos que llamarla dentro de si misma. Hay que tener en cuenta que aparte de la llamada a si misma tiene que en algún momento cortar la recursividad para no generar un loop.

En este caso la condición de salida es que cuando el numero de elementos llega a 0. Se deja de llamar a la función y se devuelve 0. En este momento, se hacen todas las sumas de los elementos y se le entrega a la variable “sumatoria” del main, el resultado de la suma.

En el siguiente código de ejemplo, se carga un vector con n elementos enteros y calcular la suma de sus elementos en forma recursiva

#include <stdio.h>
#include <conio.h>
#include <string.h>
 
// CONSTANTES
#define TAM_ARR_MAX 20
 
int main(int argc, char **argv)
{
	//DECLARACION DE  VARIABLES
	int VEC1[TAM_ARR_MAX], VEC2[TAM_ARR_MAX];
	int tam_1;
	int sumatoria;
 
	printf("#### 1 #####\n");
	tam_1 = ask_tam(); //Le pregunta al usuario que tamaño tendra el vector.
	arr_cargar(VEC1,tam_1); //El usuario Carga el vector.
	arr_mostrar(VEC1,tam_1); //Se muestra el vector Cargado
    sumatoria = rec_arr_sumatoria(VEC1,tam_1); // SUMATORIA DEL VECTOR EN FORMA RECURSIVA
	printf("\nLa sumatoria de los %d elementos del array es: %d",tam_1,sumatoria);
	printf("\n\n****************************\n");
 
    //Cierro main.
	//getch();
	return 0;
}	
 
 
 
/************************************/
/*            FUNCIONES             */
/************************************/
 
 
int ask_tam(){
	int n;
	printf("\nIngrese el tamanio que tendra el array (menor que %d):",TAM_ARR_MAX);
	do{
		scanf("%d",&n);
	}while(n<1);
	return n;
}
 
void arr_mostrar(int X[TAM_ARR_MAX], int n){
	int i;
	printf("\n");
	for(i=0;i<n;i++){
		printf("[%d]:%d",i,X[i]);
		if(i<n)
			printf("; ");
	}
	printf("\n");
}
void arr_cargar(int X[TAM_ARR_MAX], int n){
	int i;
	for(i=0;i<n;i++){
		printf("\nIngrese [%d]:",i);
		scanf("%d",&X[i]);
	}
}
int rec_arr_sumatoria(int X[], int i){
	if(i==0)
		return 0;
	else	
		return rec_arr_sumatoria(X,i-1)+X[i-1];
}
You can leave a response, or trackback from your own site.

Leave a reply

Name (*)
Mail (will not be published) (*)
URI
Comment