Função Recursivo

6 respostas
M

E ae galera to com umas dúvidas aqui nesse exercicio:

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

Então seria isso ?:
Fatorial (método recursivo)
Soma_S (método recursivo)
main:
Lê um número
Calcula o Fatorial
Calcula a Soma S

Dúvidas:
1- Eu não entendi como funciona essa formula do S, o n! serie o ultimo numero?
2- se por ex o numero que eu escolhe-se fosse 5, ele calcularia assim?: S = 5 + (5/2!) + (5/3!) + … (5/n!)
3- como seria feito esse calculo?

Agradeço ae a ajuda de vocês.

6 Respostas

E

O seu professor pediu o seguinte:
a) Criar um método que calcule o fatorial.
b) Usando o método que calcula o fatorial, você cria um método que calcula a somatória daqueles termos.

Vou dar o exemplo para n = 5.

A somatória que seu professor quer é:

1/0! + 1/1! + 1/2! + 1/3! + 1/4! + 1/5!

Ou seja, 1 + 1 + 0.5 + 0.1666… + 0.08333… + 0.016666… = 2.71666…

(Se eu não fosse seu professor, iria calcular de forma diferente, mas …)

Casualmente, essa função acha um número que se aproxima do número e, ou seja, 2,7182818284590452353602874713527…

E

Hum - não li direito o enunciado do seu professor, e não vi que ele não inclui o termo 1/0!

Então o resultado não vai ser 2.716 e sim 1.716 :slight_smile:

M

Mais e o valor que ta fora dos parenteses soma tbm? no caso ele é o n! ?
esse aqui: S = 1 + (1 / 2!) + (1 / 3!) + … (1 / n!)

E

Tio, que tal voltar às aulas de matemática? Você está se confundindo todo.

E

A propósito, uma coisa que vejo muito em aulas introdutórias de programação é que os professores insistem em dar exercícios que supõem que o aluno conheça um mínimo de matemática - eu sei, eu sei, eu sei, você deveria ter aprendido a mexer com contas com parênteses na 3a. série do ensino básico, ou até antes; mas como há a progressão continuada, na prática você fica sem saber matemática até sair da faculdade.

Eu preferiria dar um exemplo mais útil, que é o de percorrer uma árvore de diretórios. Esse é um exemplo de algo que não pode ser feito sem ser recursivamente, e não exige fazer conta nenhuma.

ribclauport

Veja o valor que fora do parentes poderia ser colocado dentro do parenteses certo?

S = (1) + (1/2!) + (1 / 3!) + … (1 / n!)

como 0! == 1
e 1! = 1

podemos escrever isso

S = (1/1!)+(1/2!) + (1 / 3!) + … (1 / n!)

Na verdade se você verificar a precedência de operadores, verás que pode tirar do parentes, pois as operações de divisão serão efetuadas em primeiro lugar…

Você deve pensar que você tem a soma recursiva, ou seja, o caso base é quando a soma é igual a 1; e a recursividade irá acontecer na função soma,

veja:

f(S) = 1/fatorial(n) + S(n-1)
f(1) = 1 --> caso base

Bom, sei que você está com dificuldades então vou mostrar a função(método) para você dar uma olhada e qualquer dúvida você posta, e não desanime, estou lendo um livro de Algoritmos e Estrutura de dados em java, além de estudar matemática também, e realmente demora para entrar na cabeça essas recursividades…

Segue

package teste;

import java.text.NumberFormat;
import java.util.Locale;


public class Exercicio {
	
	public static  float fatorial(int n){
		if(n == 0)
			return 1;
		return n*fatorial(n-1);
	}
	
	public static float s(int n){
		if(n==1)
			return 1;
			else{
			return 1/fatorial(n) + s(n-1);
		}
	}
	
	public static void main(String[] args) {
		NumberFormat nf = NumberFormat.getInstance(new Locale("pt", "BR"));  
		nf.setMaximumFractionDigits(3);  
        nf.setMinimumFractionDigits(3);  
		System.out.println(nf.format(s(5)));
	}
}
Criado 23 de novembro de 2012
Ultima resposta 23 de nov. de 2012
Respostas 6
Participantes 3