fcottf 0 Denunciar post Postado Abril 28, 2008 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
darkchrono 0 Denunciar post Postado Abril 28, 2008 #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
fcottf 0 Denunciar post Postado Abril 28, 2008 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
darkchrono 0 Denunciar post Postado Abril 28, 2008 mas com esse codigo que te passei, o resultado das saidas nao é o que você queria ? você quer q pare a recursividade qndo entrar em qual if ??? Compartilhar este post Link para o post Compartilhar em outros sites
quitZAUMMM 18 Denunciar post Postado Abril 28, 2008 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
fcottf 0 Denunciar post Postado Abril 28, 2008 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
darkchrono 0 Denunciar post Postado Abril 28, 2008 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
_Isis_ 202 Denunciar post Postado Abril 28, 2008 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