23/05/2016 Recursividad Problema: A partir de una secuencia de números enteros ingresada por teclado, computar la suma de los pares y la suma de los impares. La longitud es dato de entrada. Suma pares y Suma impares de S Caso trivial: Si S está vacía, Suma pares es 0 y Suma impares es 0. Caso recursivo: Si S tiene al menos un elemento, y el 1er elemento de S es par, Suma pares de S es Suma pares de S’+ el 1er elemento de S. Suma impares de S es Suma impares de S’. Si el 1er elemento de S es impar, Suma impares de S es Suma impares de S’+ el 1er elemento de S. Suma pares de S es Suma pares de S’. Donde S’ es S sin su 1er elemento. Dra. Jessica Andrea Carballido [email protected] Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR procedure sumaSecuencia(N: integer; var spa, sim: integer); Recursividad var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(N-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 12 5 6 Recursividad procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin 5 6 read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 5 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; Long 3 Sp Si N 3 Spa Sim Elem 12 sumPsub sumIsub N Spa Sim Elem sumPsub sumIsub 2 program p; varRecursividad long, sp,si: integer; procedure sumaSecuencia(…. … begin writeln(‘Ingrese la long de la sec’); readln(long); writeln(‘Secuencia: ‘); sumaSecuencia(long, sp, si); writeln(‘La suma de pares es: ‘,sp); writeln(‘La suma de impares es: ‘,si); end. Ingrese la long de la sec 3 Secuencia: 12 5 6 12 5 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; Long 3 Sp Si N 3 Spa Sim Elem sumPsub sumIsub 5 6 Recursividad procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin 6 read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; N 1 Spa Sim Elem sumPsub sumIsub 1 23/05/2016 6 Recursividad procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 6 Recursividad N procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 1 Spa Sim Elem 6 sumPsub procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; sumIsub N procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 0 Spa Sim Elem sumPsub sumIsub 6 Recursividad procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; N 1 Spa Sim Elem 6 sumPsub 0 sumIsub 0 N 0 Spa Sim Elem sumPsub sumIsub 5 6 Recursividad N procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 1 Spa Sim Elem 6 sumPsub 0 sumIsub 0 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 5 6 Recursividad 12 5 6 Recursividad procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 6 0 5 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; 6 0 N 1 Spa Sim Elem 6 sumPsub 0 sumIsub 0 Long 3 Sp Si N 3 Spa Sim Elem 12 sumPsub 6 5 sumIsub N 2 Spa Sim Elem sumPsub sumIsub 5 6 0 2 23/05/2016 Long 12 5 6 Recursividad 3 Sp procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; Si N 3 Spa Sim Elem 12 sumPsub 6 5 sumIsub program p; varRecursividad long, sp,si: integer; procedure sumaSecuencia(…. … begin writeln(‘Ingrese la long de la sec’); readln(long); writeln(‘Secuencia: ‘); sumaSecuencia(long, sp, si); writeln(‘La suma de pares es: ‘,sp); writeln(‘La suma de impares es: ‘,si); end. Ingrese la long de la sec 3 Secuencia: 12 5 6 12 5 6 procedure sumaSecuencia(N: integer; var spa, sim: integer); var elem: integer; sumPsub, sumIsub: integer; begin if (n = 0) then begin spa:= 0; sim:= 0; end else begin read(elem); sumaSecuencia(n-1, sumPsub, sumIsub); if (odd(elem)) then begin sim := sumIsub + elem; spa:= sumPsub; end else begin sim:= sumIsub; spa := sumPsub + elem; end; end; end; program p; varRecursividad long, sp,si: integer; procedure sumaSecuencia(…. … begin writeln(‘Ingrese la long de la sec’); readln(long); writeln(‘Secuencia: ‘); sumaSecuencia(long, sp, si); writeln(‘La suma de pares es: ‘,sp); writeln(‘La suma de impares es: ‘,si); end. Long 3 Sp 18 5 Si N 3 Spa Sim Elem 12 sumPsub 6 sumIsub 5 Ingrese la long de la sec 3 Secuencia: 12 5 6 Long 3 Sp 18 Si 5 3