Ir ao conteúdo
  • Cadastre-se

Ajuda com recursividade em c


Ir à solução Resolvido por Edmorte,

Posts recomendados

  • Solução

Faz tempo que eu não entro no site, mas como recebi um email vim verificar, estava cansado de ninguém avaliar as respostas, mas curiosamente o usuário tinha voltado para agradecer, recebi um email e voltei.

 

Também não resolvo programa para os outros, mas quando a complexidade é alta eu coloco um código para servir de plataforma para os iniciantes.

 

Segue abaixo:

#include <stdio.h>void minmaxrec(int* array, int length, int& min, int& max){    if(!length)        return;            if(array[length - 1] > max)        max = array[length - 1];    if(array[length - 1] < min)        min = array[length - 1];            minmaxrec(array, length - 1, min, max);}int main(int argc, char **argv) {	int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0};    int min = 100, max = 0;        minmaxrec(array, 10, min, max);        printf("min: %d, max: %d", min, max);	return 0;}

Eu não sei se eu alcancei a técnica TAIL recursion, mas tentei exemplificar ela.

 

Rodando em: http://coliru.stacked-crooked.com/a/e092efe4501ad012

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Faz tempo que eu não entro no site, mas como recebi um email vim verificar, estava cansado de ninguém avaliar as respostas, mas curiosamente o usuário tinha voltado para agradecer, recebi um email e voltei.

 

Também não resolvo programa para os outros, mas quando a complexidade é alta eu coloco um código para servir de plataforma para os iniciantes.

 

Segue abaixo:

#include <stdio.h>void minmaxrec(int* array, int length, int& min, int& max){    if(!length)        return;            if(array[length - 1] > max)        max = array[length - 1];    if(array[length - 1] < min)        min = array[length - 1];            minmaxrec(array, length - 1, min, max);}int main(int argc, char **argv) {	int array[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0};    int min = 100, max = 0;        minmaxrec(array, 10, min, max);        printf("min: %d, max: %d", min, max);	return 0;}

Eu não sei se eu alcancei a técnica TAIL recursion, mas tentei exemplificar ela.

 

Rodando em: http://coliru.stacked-crooked.com/a/e092efe4501ad012

Porque você usou um & nos argumentos da função, antes de min e max?

EDIT: .Obrigado pela resposta me ajudou muito.

Link para o comentário
Compartilhar em outros sites

Porque elas são referências.

 

Esqueci que em C não tem referência, como eu disse quis simular um tail-call, o compilador do C não deve saber otimizar, mas quis passar o conceito.

 

Acredito que substituindo por ponteiros e fazendo ajustes não deve trazer problemas.

 

Corrigi para ficar 100% C:

 

http://coliru.stacked-crooked.com/a/26733ec99659c056

 

Se estivessemos programando uma linguagem funcional resolveriamos usando TUPLA, mas no C melhor usar o argumento como retorno, por isso usei PONTEIRO/REFERENCIA.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...