Ir ao conteúdo

Ajuda com Recursão


CurtAlloy6823

Posts recomendados

Postado

Olá Galera !

Estou tentando fazer um programa que peça para o usuário digitar um número qualquer e retorne para ele o seguinte:

Ex.:Num = 4

4 3 2 1 2 3 4

3 2 1 2 3

2 1 2

1

2 1 2

3 2 1 2 3

4 3 2 1 2 3 4

Eu estou tentando faze-lo usando recursão porém estou encontrando dificuldades para fazer as linhas abaixo da primeira:

void mostra(int n);
main(){
int n;
printf("Entre com n entre 1 e 9:");
scanf("%d",&n);
mostra(n);
getch();
}
void mostra(int n){
if(n==1)
printf("1");
else{
printf("%d\t",n);
mostra(n-1);
printf("\t%d\t",n);
printf("\n");
mostra(n-1);
}
}

Obs: As duas ultimas linhas do bloco else estão dando erro. As três primeiras escrevem a 1ª linha sem erros.

Alguem poderia me dar uma luz ? Agradeço desde já ..

Postado

Crie duas funções recursivas.

A primeira (chamada de "recursao2()"), fará a amostragem do valor "4321234". Para isso, mostre o número quando ele for entrar na pilha, e depois, quando sair da pilha.

Exemplo:


printf();
recursao2();
printf();

O exemplo acima, vai precisar de tratamento para controlar o limite da recursão.

A segunda função recursão (chamada de "recursao1()"), será o tratamento para formar as linhas. Ela fará a chamada para a primeira recursão, em seguida, se auto-chamará, decrementando o valor em 1 e chamará novamente a primeira recursão.

Exemplo:


recursao2();
recursao1();
recursao2();

Precisa fazer os devidos tratamentos, também, para o limite da recursividade.

Mas, a ideia principal seria essa.

Postado

A "recursao1()", vai chamar "recusao2()", passando por parâmetro o valor limite que a segunda função ira mostrar na tela.

No exemplo acima, passou o valor 4. Depois disso, a função "recursao1()", fará a chamada a sí mesmo, porém, o parâmetro será "i-1", ou seja, receberá o valor 3 na próxima iteração. A partir daí, ela vai chamar a função "recursao2()", passando o valor 3 por parâmetro.

Exemplo:


Primeira chamada:
recusao1(4) -> recursao2(4)
Saída: 4321234

Segunda chamada, recusao1() fará a chamada a sí mesmo, decrementando o valor em 1:
recursao1(3) -> recursao2(3)
Saída: 32123

Arquivado

Este tópico foi arquivado e está fechado para 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...