Você está na página 1de 3

Programação Estruturada II

Recursividade – Exercícios Propostos

Todas as questões devem ser respondidas tendo como base a linguagem C, vista na disciplina.

1. Leia um número e calcule recursivamente a soma de 0 até o número lido.

Ex: Numero lido 3 Exibir:

3 + 2 + 1 + 0 = 6

2. Leia um número e calcule recursivamente a soma de 0 até o número lido. Exibir o

resultado parcial da soma.

Ex: Numero lido 2 Exibir:

2+1+ 0 Soma parcial = 1 Soma parcial = 3 Soma de 0 até 2 = 3

3. Fazer um programa que leia, some 2 valores inteiros e mostre o resultado da soma.

No final do programa, deverá ter uma recursividade que chame novamente o programa principal, mostre a mensagem “Digite 1 se desejar executar o programa novamente”, caso positivo, executar o programa novamente caso negativo, terminar a execução do programa.

4. Analise o código abaixo e responda:

a) O que esse programa faz?

b) Existe recursividade Direta ou indireta nele? Justifique.

#include<stdio.h> #include <stdlib.h>

int funcao(int x) { printf( "\n %d", x); if(abs(x) < 10 ) return 1;

else

return(1 + funcao(x/10));

}

int main() { int num;

num=10145;

printf(" \n Total: %d \n", funcao(num)); system ("pause");

}

5. A série Fibonacci pode ser definida da seguinte maneira: Fib(n) = n , para n=0 ou n=1 Fib(n) = fib(n-1)+fib(n-1), para n > =2

a) E possível definir uma rotina recursiva fib(n) tal que ela imprima os n termos da

série Fibonacci? Se for, apresente o algoritmo; senão explique por que não é possível.

b) Seja f(n) uma função que retorna o n-ésimo termo da série Fibonacci. Defina para

f(n) uma função recursiva e outra interativa e compare, sucessivamente o tempo gasto para executar cada uma delas.

6. Questão da prova do ENADE 2008. Os termos da sequência de Fibonacci são definidos por: Fibonacci(0) = 0 Fibonacci(1) = 1 Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2) Uma solução recursiva para o cálculo do i-ésimo termo da sequência é dada pela função a seguir.

1 2 3 4 5 6 7

funcao fibonacci(inteiro longo n) se((n=0) OU (n=1)) entao

retorne n senao

retorne fibonacci(n-1) + fibonacci(n-2) fimse

fim

(continuação exercício 6):

7. Acerca da execução recursiva dessa função, assinale a opção incorreta.

a) À medida que o valor de n cresce, há um aumento no número de chamadas

recursivas.

b) O método recursivo é o mais eficiente para o cálculo do i-ésimo termo da

seqüência de Fibonacci, pois realiza duas chamadas por passo da recursão, cada

uma mais simples do que a chamada original.

c) Na linha 5, a ordem de execução é calcular o valor para fibonacci(n-1) e

somente depois calcular o valor para fibonacci(n-2).

d) As condições de parada da recursão são: o valor de n é 0 ou o valor de n é 1.

8. Dada a função X: Int X(int n; int m) { if (n=m) or (m=0) { return 1; } else { return x(n-1,m)+x(n-1,m-1) ; } } a) Qual o valor de x(5,3) ? b) Quantas chamadas serão feitas na avaliação acima ?

9. Dada a função abaixo:

Int X(int N){ if (n >= 0) && (n <= 2) { return n }

else { return x(n-1)+x(n-2)+x(n-3) }

}

a)

quantas chamadas serão executadas para avaliar x(6) ? b) indique a sequencia

temporal destas chamadas.

10.

Escreve uma função que recebe como parâmetro um inteiro positivo N e retorna a soma de todos os números inteiros entre 0 e N.

11.

Considere a função abaixo: int X(int a) { if ( a <= 0 ) return 0; else return a + X(a-1); }

a)

O que essa função faz?

b)

Calcule a sua ordem de complexidade. Mostre como você chegou a esse resultado.

c)

Escreva uma função não-recursiva que resolve o mesmo problema. Explique.

12.

Seja a série de Fibonacci:

Então

escreva:

a) Uma função recursiva que gere o termo de ordem n da série de Fibonacci.

b) Um algoritmo que, utilizando a função definida acima gere a série de Fibonacci até o

termo

de ordem 20.

13.

Fazer uma função recursiva que calcule o valor da série S descrita a seguir para um valor n > 0 a ser fornecido como parâmetro para a mesma: S = 1 + 1/2! +

1/3! +

1/n! OBS: A função fatorial também deve ser recursiva.

14.

O máximo divisor comum (MDC) de dois números inteiros x e y pode ser calculado usando-se uma definição recursiva:

e y pode ser calculado usando-se uma definição recursiva: Exemplo: MDC (10,6) = MDC (6,4) =

Exemplo:

MDC (10,6) = MDC (6,4) = MDC (4,6) = MDC (4,2) = MDC (2,4) = MDC (2,2) = 2

Então, pede-se que seja criada uma função recursiva para descrever tal definição. Crie, também, um algoritmo que leia os dois valores inteiros e utilize a função criada para calcular o MDC de x e y, e imprima o valor computado.