Ir ao conteúdo
  • Cadastre-se
Lucas Akio Fujita Sato

RESOLVIDO Ajuda com recursividade em c

Recommended Posts

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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×