Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Recursividade - Resolução dos Exercícios 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 4); 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 4); 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 4); 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 4); 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) 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 para determinar o número de dígitos de um número N inteiro. int digitos(int n) { int result; if (n/10==0) return 1; return result = 1 + digitos(n/10); } Segunda lista(Slide 50) 1)Escreva uma função recursiva para calcular o N-ésimo número da sequência de Fibonacci. A sequência é dada por: #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; } 2) Seja S um vetor de inteiros. Descreva funções recursivas para calcular: a) o elemento máximo de S; b) a soma dos elementos de S; c) média aritmética dos elementos de S. #include <stdio.h> #include <stdlib.h> int maior_elemento(int S[], int tam) { int maior; if(tam == 1) return (S[0]); else { maior = maior_elemento(S, (tam - 1)); if(maior > S[tam - 1]) return maior; else return (S[tam - 1]); } } int soma_elementos(int S[], int tam) { int soma; if(tam == 1) return S[0]; else { soma = S[tam - 1] + soma_elementos(S, (tam - 1)); return soma; } } float media_elementos(int S[], int tam) { float media; media = soma_elementos(S, tam) / tam; return media; } int main() { int i, S[5]; for(i = 0; i < 5; i++) { printf("S[%d] = ", i); scanf("%d", &S[i]); } printf("\nO maior elemento de S eh: %d", maior_elemento(S, 5)); printf("\nA soma dos elementos de S eh: %d", soma_elementos(S, 5)); printf("\nA media aritmetica dos elementos de S eh: %.2f\n", media_elementos(S, 5)); return 0; } 3)Escreva uma função recursiva que imprima na tela os números ímpares de 1 à um número fornecido pelo usuário. #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 função recursiva, ImprimeSerie (i, j, k), que imprime na tela a série de valores do intervalo [i,j], com incremento k (i, j e k são 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; }