Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fcottf

Como parar esta recursividade

Recommended Posts

Olá Galera. O exemplo é simples, mas conseguindo parar esta recursividade, conseguirei solucionar um algoritmo que está sendo bastante complicado de achar a solução.

 

A saída deste programa tem que ser

 

ok

done 5

 

mas ele esta saindo

 

ok

done 5

done 5

done 4

done 3

done 2

done 1

done 0

 

#include <stdio.h>

int func(int x)
{
	if (x == 10)
		{ printf("ok\n"); }
	else if (x < 10)
		 func(x+1);
	if (x <= 5)
	{ printf("done %d\n",x);
	return;
	}

}

int  main()
{
 int y = 0;
 y = func(y);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>

int func(int x)
{
	if (x == 10)
		{ printf("ok\n"); }
	else if (x < 10)
		 func(x+1);
	if (x == 5)//coloquei aqui (x == 5)
	{ printf("done %d\n",x);
	return 1;
	}

}

int  main()
{
int y = 0;
y = func(y);
}

assim, ta ok ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dae darkchrono

 

Entao cara, assim eh um jeito de resolver que pro algoritmo maior nao resolve.

 

A idéia eh que nao importa o argumento do if... e sim, que se entrar no if ele deve parar a recursividade.... e é aí que eu estou me batendo. =S

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom eu pra falar a verdade 'odeio' recursividade pq acho meio complicado hehe!

+ do jeito q o darkchrono colocou ao mew ver esta certo!

você tem q ficar esperto na condição de parada pq qnd a recursividade começa a desempilhar ele faz chamada ao ultimo numero chamado, por isso esta dando done4, done3, done1;

 

volte a postar!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao cara . Eh oq eu disse...

Para este exemplinho, mudar o argumento do if resolve, mas o que preciso é que se entrar no if, ele pare a recursividade.

 

neste if.

 

if (x <= 5)
	{ printf("done %d\n",x);
	return;
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara acho q nem dá... sei la, mto esquisito isso que você quer....

 

int func(int x){

	if (x == 10)
		{ printf("ok\n"); }

	else if (x < 10)
		 func(x+1);
	
	if (x>=5){	
			   if (x <= 5){ 
					  printf("done %d\n",x);
					  return 1;
			   }
	}
}

eu colokei um if a mais, mais sei la, ta estranho isso haha

Compartilhar este post


Link para o post
Compartilhar em outros sites
cara acho q nem dá... ´

 

Dá sim. Ele só precisa chegar no fundo da recursao e retornar. O negocio não é crescente.

 

Ele tem que contar ate 10 e imprimir somente o ok qdo chegar no 10 e done 5 somente?

 

void func(int x)
{  
if (x < 10)
   func(x+1);
else if (x == 10) {
   puts("ok");
   return;
}
 if (x == 5)
   printf("done %d",x);
}

int  main(){
 func(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.