Sie sind auf Seite 1von 4

Lista de Exerccios 04 Recursividade (v2)

Ateno: Em 22/09/2016 a lista foi revisada nos seguintes pontos:


Incluso de novos exerccios (a partir do 9).
Exerccio 1
Faa uma funo recursiva que receba um nmero inteiro positivo N e imprima todos os nmeros naturais
de 0 at N em ordem decrescente.
a. Documente as funes no formato do JavaDoc.
b. Implemente um programa que testa a sua funo.
Exerccio 2
Faa uma funo que multiplique dois nmeros naturais atravs de somas sucessivas. Por exemplo:
6 * 4 = 4 + 4 + 4 + 4 + 4 + 4

a. Documente as funes no formato do JavaDoc.


b. Implemente um programa que testa a sua funo.
Exerccio 3
Implemente uma funo recursiva que calcula o n-simo termo da srie de Fibonacci.
fibonacci(0) = 1
fibonacci(1) = 1
fibonacci(n) = fibonacci(n-1) + fibonacci(n-2), para n>1

a. Encapsule as funcionalidades em funes. Sua funo deve ter a seguinte interface:


int fibonacci(int n);

b. Documente as funes no formato do JavaDoc.


c. Implemente um programa que testa a sua funo.
Exerccio 4
Crie uma funo recursiva que receba um nmero inteiro positivo N e calcule o somatrio dos nmeros
de 1 a N.
a. Documente as funes no formato do JavaDoc.
b. Implemente um programa que testa a sua funo.
Exerccio 5
Implemente uma funo recursiva que recebe como parmetros dois nmeros inteiros n e k, e calcula o
coeficiente binomial C(n,k) correspondente, definido pela seguinte relao recursiva:
C(n,0) =1 e C(n,n) =1 para n >= 0
C(n,k) = C(n -1,k) + C(n -1,k -1) para n > k > 0

a. Encapsule as funcionalidades em funes. A interface dessa funo deve ser:


int coeficiente (int n, int k);

b. Documente as funes no formato do JavaDoc.


c. Implemente um programa que testa a sua funo.
Exerccio 6
Calcule a seguinte frmula recursivamente:

a. Documente as funes no formato do JavaDoc.


b. Implemente um programa que testa a sua funo.

Exerccio 7
Considerando a definio da srie harmnica abaixo:
Hn = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n

a. Escreva uma funo recursiva que calcule o valor de Hn dado o nmero de termos da srie desejado.
Essa funo recebe como parmetro o nmero inteiro positivo n, e retorna o Hn correspondente,
seguindo a interface:
float harmnico (int n);

a. Escreva um programa que capture o nmero de termos da srie harmnica, fornecido pelo usurio via
teclado, e imprima o Hn correspondente. Este programa deve fazer uso da funo do item anterior.
b. Documente as funes no formato do JavaDoc.
Exerccio 8
Verifique o que as funcoes dos algoritmos abaixo imprimem e retornam:
(i)
func (int n) {
if (n == 0)
printf(fim);
else {
printf(n);
func(n-1);
}
}

(ii)
func (int n) {
if (n == 0)
printf(fim);
else {
func(n-1);
printf(n);
}
}

(iii)
func (int n) {
if (n == 0)
printf(fim);
else {
printf(n);
func(n-1);
printf(n);
}
}

(iv)
func (int n) {
if (n == 0)
printf(fim);
else {
func(n-1);
printf(n);
func(n-1);
}
}

Exerccio 9
a. Implemente uma funo recursiva que, dados dois nmeros inteiros x e n, calcula o valor de xn.
b. Implemente uma funo no recursiva (sem usar bibliotecas do Java). Compare as duas funes. Que
concluses voc tira?
c. Documente as funes no formato do JavaDoc.

Exerccio 10
Considere a funo abaixo:
int X(int a)
{
if ( a <= 0 )
return 0;
else
return a + X(a-1);
}

a. O que a funo retorna?


b. Implemente a mesma funo de forma no recursiva. Compare as duas funes. Que concluses voc
tira?
Exerccio 11
Um problema tpico em cincia da computao consiste em converter um nmero da sua forma decimal
para a forma binria. Por exemplo, o nmero 12 tem a sua representao binria igual a 1100. A forma
mais simples de fazer isso dividir o nmero sucessivamente por 2, onde o resto da i-sima diviso vai
ser o dgito i do nmero binrio (da direita para a esquerda).
Por exemplo: 12 / 2 = 6, resto 0
(1 dgito da direita para esquerda), 6 / 2 = 3, resto 0
(2 dgito da direita para esquerda), 3 / 2 = 1 resto 1
(3 dgito da direita para esquerda), 1 / 2 = 0 resto 1
(4 dgito da direita para esquerda). Resultado: 12 = 1100
a. Escreva um procedimento recursivo decimalParaBinario(int n) que dado um nmero decimal imprima
a sua representao binria corretamente.
Exerccio 12
Crie uma funo recursiva para calcular o mximo divisor comum entre 2 nmeros.
Gerador de mximo divisor comum (mdc):
mdc(x; y) = y, se x >= y e x mod y = 0
mdc(x; y) = mdc(y; x), se x < y
mdc(x; y) = mdc(y; x mod y), caso contrrio.

Exerccio 13
Crie uma funo recursiva que verifique se uma palavra palndromo (Ex. aba, abcba, xyzzyx).
Exerccio 14
Crie uma funo recursiva que dado um nmero n, gere todas as possveis combinaes com as n
primeiras letras do alfabeto.
Exemplo: n = 3
Resposta: ABC, ACB, BAC, BCA, CAB, CBA.
Exerccio 15
Uma matriz maze de 0s e 1s, de 10X10, representa um labirinto no qual um viajante precisa encontrar um
caminho de maze[0][0] a maze[9][9]. O viajante pode passar de um quadrado para qualquer outro
adjacente na mesma fileira ou coluna, mas no pode saltar quadrados nem se movimentar na diagonal.
Alm disso, o viajante no pode entrar num quadrado contendo um 1. maze[0][0] e maze[9][9] contm
0s . Escreva uma funo recursiva que aceite este labirinto maze e imprima uma mensagem informando
a inexistncia de um caminho atravs do labirinto, ou que imprima uma lista de posies representando
um caminho de [0][0] a [9][9].
Exerccio 16
Escreva um mtodo recursivo
public static boolean appearsIn(String s, char c)
que, dada uma string s e um caracter c, verifique se c aparece em s.

Exerccio 17
Escreva um mtodo recursivo
public static int occurrences(String s, char c)
que, dada uma string s e um character c, retorne o nmero de ocorrncias de c em s.
Exerccio 18
Escreva um mtodo recursivo
public static String underscore(String s)
que, dada uma string s, retorne uma string obtida de s trocando cada espao com um _.
Exerccio 19
Escreva um mtodo recursivo
public static String reverse(String s)
que, dada uma string s, retorne uma string constituda pelos caracteres de s na ordem inversa.
Exerccio 20
Escreva um mtodo recursivo
public static void permutations(String s, PrintStream p)
que, dada uma string s imprima em p todas as strings obtidas pela permutao de caracteres de s.
Por exemplo,
permutations("abc", System.out)
deve imprimir o seguinte resultado na sada padro:
abc
acb
bac
bca
cab
cba

Fontes:
Material fornecido pelos professores Pedro Moura e Edirlei Lima.
Material da internet:
http://www.decom.ufop.br/menotti/aedI092/listas/lista05-Recursividade.pdf
http://wiki.icmc.usp.br/images/d/d0/Icc2_lista2.pdf
https://programacaodescomplicada.files.wordpress.com/2012/10/lista-recursc3a3o.pdf
http://www.inf.unibz.it/~calvanese/teaching/ip/exercises/recursion/strings/

Das könnte Ihnen auch gefallen