Ir para conteúdo

POWERED BY:

Arquivado

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

quitZAUMMM

Recursividade

Recommended Posts

Tipo glr naum qro o negocio pronto, qro q vcs me deem uma luz pra entender isso.. pq como vo usar a função dentro dela msma!! help-me pf.

 

Faça o diagrama de execução para a seguinte função recursiva com N = 6.

Obs: Considere como símbolo de atribuição o sinal de igualdade '=' .

 

Função: inteiro zzz(inteiro n)

 

Variáveis: inteiro aux

 

Início

 

SE ( n <= 2 )

 

RETORNE ( 1 )

 

FIM-SE

 

n = n – 1

 

aux =zzz ( n )

 

n =n – 1

 

RETORNE ( aux + zzz( n ) )

 

Fim

Compartilhar este post


Link para o post
Compartilhar em outros sites

A cada chamada de uma nova função a função anterior é empilhada até que alguma das funções se resolva.

Quando uma função se resolve ela volta desempilhando todas as outras.

 

Tente montar isso que falei no papel e faça o teste de mesa.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz kandrade num entendi muito..

 

pq tipo como vo saber resolver isso: aux =zzz ( n )

 

:s

 

+ vlw, eu pelo menos peguei um poco da lógica soh num consegui desembaraça-la totalmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente não vai saber isso:

aux =zzz ( n )

 

mas n vai variar até chegar em 2

SE ( n <= 2 )
   RETORNE ( 1 )
FIM-SE

Quando n chegar a 2 essa função termina e as funções empilhadas começam a receber seus valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara tenho q ser bem sincero com você..

eu faço até aki dai trava

 

n n aux zzz(n)

0 0

1 1

2 2

3 2

 

tipo eu até vi uma função de fibonacci assim + msm assim tem um nó =x

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. n = 6; aux = ?; zzz(5)

2. n = 5; aux = ?; zzz(4)

3. n = 4; aux = ?; zzz(3)

4. n = 3; aux = ?; zzz(2)

 

desempilha 4

n = 2; aux = 1;

n = 1

retorno = 1 + 1 = 2

 

desempilha 3

n = 3; aux = 2

n = 2

retorno = 1 + 2 = 3

 

desempilha 2

n = 4; aux = 3

n = 3

retorno = 1 + 2 + zzz(3)

 

 

e assim vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz cara fiz até em C pra ver os resultados + hj eu tenho aula de algoritmo ai eu pego uns 10 min da professora pra ela me explicar detalhadamente esse negocio de recursividade.

 

#include <iostream>
#include <conio.h> 
#define limpa system("cls")

using namespace std;

int zzz(int num)
{
	int aux, y;
	if (num <= 2) return (1);
	num=num-1;
	aux=zzz(num);
	num=num-1;
	y=(aux+zzz(num));
	return (y);
}

main()
{
   cout << "Digite um numero: ";
   int n;
   cin >> n;
   cin.get ();
   limpa;
   cout << "O resultado e: " << zzz(n) << endl;
   system("pause>>NULL");
   return 0;
}

+ kra vlw pela explicação agora tenho pelo menos noçaum de como funciona.

gravei q pra resolver um alg. recursivo precisa-se do metodo de empilhar e desempilhar..

vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum Kandrade fiz oq eu consegui..

 

 

1. n = 6; aux = ?; zzz(5)

2. n = 5; aux = ?; zzz(4)

3. n = 4; aux = ?; zzz(3)

4. n = 3; aux = 1; zzz(2)

 

desempilha 4 // quando 'n' for 3

n = 2; aux = zzz(2) => 1;

n = 1; zzz(n) = 1

retorno = 1 + 1 = 2

 

desempilha 3 //quando 'n' for 4

n = 3; aux = zzz(3) => 2

n = 2; zzz(n) = 1

retorno = 1 + 2 = 3

 

desempilha 2 //quando 'n' for 5

n = 4; aux = zzz(4) => 3

n = 3;

retorno = 1 + 2 + 3 = 6

 

desempilha 1 //quando 'n' for 6

n = 5; aux = zzz(5) => 6

n = 4

retorno = 1 + 2 + 3 + 6 = 12

 

mas no prog. q fiz em C c tiver certo o resultado pra qnd 'n' for 6 é 8.

 

me ajuda!!

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.