Escolar Documentos
Profissional Documentos
Cultura Documentos
10 Recursividade
10 Recursividade
2) Faa o teste de mesa do procedimento abaixo e informe qual ser a sada do mesmo se a chamada
for faz( 1, 4 ).
Na primeira passada a recebera 1 e b 4;
Entrara no else ( if dara falso ja que 1 nao e maior que
a == b e falso entao entra no outro else;
Imprime 1 e chama novamente o procedimento;
Agora na segunda passada a recebe 2 e b continua 4;
Entrara no else ( if dara falso ja que 1 nao e maior que
a == b e falso entao entra no outro else;
Imprime 2 e chama novamente o procedimento;
Na terceira passada a recebe 3 e b continua 4;
Entrara no else ( if dara falso ja que 3 nao e maior que
a == b e falso entao entra no outro else;
Imprime 3 e chama novamente o procedimento;
Na quarta passada a recebe 4 e b continua 4;
Entrara no else ( if dara falso ja que 4 nao e maior que
a == b e verdadeiro entao entra if e imprime 4;
No final imprimiu 1234 , que era o resultado esperado;
3) Dada a funo X:
int X (int n, int m)
{
if ((n<=m) || (m==0) || (n==0))
return 1;
return X(n-1,m)+X(n-1,m+1);
}
a) Qual o valor de X(5,3) ?
5
b) Quantas chamadas sero feitas na avaliao acima?
4);
4);
4);
4);
4) Escreva uma funo recursiva para calcular o somatrio dos N primeiros nmeros inteiros
positivos.
int somatorio(int n)
{
int soma;
if (n==0)
return 0;
return soma = n + somatorio(n-1);
}
5) Escreva uma funo recursiva que recebe como parmetros um nmero real X e um inteiro N e
retorna o valor de XN Obs.: N pode ser negativo .
6) Escreva uma funo recursiva para determinar o nmero de dgitos de um nmero N inteiro.
int digitos(int n)
{
int result;
if (n/10==0)
return 1;
return result = 1 + digitos(n/10);
}
#include <stdio.h>
#include <stdlib.h>
int F(int n)
{
if(n == 0)
return 0;
else if(n == 1)
return 1;
else
return(F(n-1) + F(n-2));
}
int main()
{
int num;
printf("Digite o valor de n: ");
scanf("%d", &num);
if(num < 0)
printf("\nValor de n eh invalido!\n");
else
printf("\nTermo de numero %d da sequencia de Fibonnacci eh: %d\n", num, F(num));
return 0;
}
3)Escreva uma funo recursiva que imprima na tela os nmeros mpares de 1 um nmero fornecido
pelo usurio.
#include <stdio.h>
#include <stdlib.h>
void imprime_impar(int n)
{
if(n == 1)
printf("%d ", n);
else
{
if(n % 2 == 0)
imprime_impar(n-1);
else
{
imprime_impar(n-2);
printf("%d ", n);
}
}
}
int main()
{
int num;
printf("Digite o valor de n: ");
scanf("%d", &num);
imprime_impar(num);
return 0;
}
4) Escreva uma funo recursiva, ImprimeSerie (i, j, k), que imprime na tela a srie de valores do
intervalo [i,j], com incremento k (i, j e k so inteiros).
#include <stdio.h>
#include <stdlib.h>
void imprime_serie(int i, int j, int k)
{
if(i <= j)
{
printf("%d ", i);
imprime_serie((i + k), j, k);
}
}
int main()
{
int i, j, k, aux;
printf("Digite dois numeros que definem o intervalo: ");
scanf("%d %d", &i, &j);
if(i > j)
{
aux = i;
i = j;
j = aux;
}
printf("Digite o incremento do intervalo: ");
scanf("%d", &k);
imprime_serie(i, j, k);
return 0;
}