10 Recursividade
Primeira Lista (Slide 46)
1) Faça um procedimento recursivo que receba dois valores inteiros a e b e imprima o intervalo fechado entre eles. Se a for maior que b mostrar mensagem de erro. void intervalo(int a, int b)
{
if (a > b) printf("Erro: primeiro numero maior que o segundo"); else { if(a==b) printf("%d",a); else { printf("%d",a); intervalo(a+1,b);
}
}
}
2) Faça o teste de mesa do procedimento abaixo e informe qual será a saída 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 função 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 serão feitas na avaliação acima?
3
4);
4);
4);
4);
4) Escreva uma função recursiva para calcular o somatório dos N primeiros números inteiros positivos. int somatorio(int n)
{
int soma; if (n==0) return 0; return soma = n + somatorio(n-1);
}
5) Escreva uma função recursiva que recebe como parâmetros um número real X e um inteiro N e retorna o valor de XN Obs.: N pode ser negativo .
float eleva(float x,int n)
{
if (n<0){ return 1/eleva(x,-n);
}
else if (n==1) return x; return x*eleva(x,n-1);
}
6) Escreva uma função recursiva