Ir para o conteúdo
DiogoRibeiro

funçao que retorne o valor de uma sequencia

Mensagens Recomendadas

DiogoRibeiro    0
DiogoRibeiro

Boas, estou a tentar resolver um problema, em que este me pede pra criar uma funçao que retorne o valor de uma sequencia x(n-1)+x(n-2) para n>=2..

eu sei que posso tomar como exemplo a serie de fibonacci, no entanto so encontro soluçoes recursivas.. e eu nao posso resolver por recursividade..

Alguma ajuda??

esta aqui o que fiz...

int fiab( int n){        // funçao da sequencia
int xn0,xn1;
xn0=1;
xn1=1;
for(int i=1; i>=n; i--){
	n=xn0-xn1;
	xn0=xn1;
	xn1=n;
}
return (n);
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

1º como os numeros de fibonacci tens como primeiros numeros definidos como x(0) = 0 e x(1) = 1 ... tens de verificar se o n é 0 ou 1.

2º é mais explícito usares uma iteração em que estás a incrementar o valor de i, simplesmente porque é isso que normalmente fazes quando estás a calcular os números no papel.

pegando no teu código:

unsigned int fiab(unsigned int n){        // o tipo de dados é unsigned int porque a função não está definida para n < 0
  unsigned int xn0 = 0, xn1 = 1;

  if (n == 0)
    return xn0;
  if (n == 1)
    return xn1;

  for(int i=2; i<=n; i++){  // vais iterar entre 2 e n incrementalmente
    n=xn0+xn1;                // tinhas que o operador - ... mas a função é x(n) = x(n-1) + x(n+2)
    xn0=xn1;
    xn1=n;
  }
  return n;
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
DiogoRibeiro    0
DiogoRibeiro

na funçao que tu colocas-te, nao da o valor pretendido... porque perante a funçao, se colocarmos 4, o programa teria que fazer (4-1)+(4-2)+(4-3)+(4-4)=6... enquanto para qualquer valor que coloque da sempre resultado de 1..

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Quer dizer que a tua função é o somatório de n - a em que a vai de 1 a n?

X(n) = (n - 1) + (n - 2) + ... + (n - n) ?

Não é exactamente isso que representaste no teu post inicial. Aliás, a solução para esse teu problema ainda se torna mais simples. Basta iterares o valor de a e somares a uma variável final:

for (a = 1; a <= n; a++) { x += n - a; }

Assim nem estou exactamente a perceber porque irias querer uma função recursiva... ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

na funçao que tu colocas-te, nao da o valor pretendido... porque perante a funçao, se colocarmos 4, o programa teria que fazer (4-1)+(4-2)+(4-3)+(4-4)=6... enquanto para qualquer valor que coloque da sempre resultado de 1..

vou ter de destruir a minha bola de criatal ... não anda a adivinhar bem o que as pessoas querem ....

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
DiogoRibeiro    0
DiogoRibeiro

Sorry, expressei-me mal...

Mas agora acho que deu para entender um pouco melhor!

Mas eu ja tentei assim

for (a = 1; a <= n; a++) { x += n - a; }

e mesmo assim nao deu o resultado que esperava :X

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Boas, estou a tentar resolver um problema, em que este me pede pra criar uma funçao que retorne o valor de uma sequencia x(n-1)+x(n-2) para n>=2..

eu sei que posso tomar como exemplo a serie de fibonacci, no entanto so encontro soluçoes recursivas.. e eu nao posso resolver por recursividade..

Se bem percebo, tens que programar algo que te devolva os valores da sucessão:

x(0)=a

x(1)=b

x(n)=x(n-1)+x(n-2), para n>=2

Como isto é precisamente a sucessão de fibonnaci para x(0),x(1) arbitrários, a solução iterativa é exatamente a mesma, mas usando valores (passados como parâmetros à função?) para x(0) e x(1). Qual é a dúvida?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Na verdade, o que o DiogoRibeiro quer é isto:

for (i = 1; i < n; i++) result += i;

Só que da forma como ele expressou, que é o somatório de (n - a) em que a vai de 1 até n.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
DiogoRibeiro    0
DiogoRibeiro

#include <iostream>
using namespace std;

// funçao da sequencia
  int fiab( int n){

int xn0=1; 
int xn1=2;
int result;

//caso o n seja 0 ele devolve 1 
if (n == 0)
    return xn0;
// caso seja n=1 ele vai devolver 2
else if (n == 1)
    return xn1;
// se nao vai retornar o valor da sequencia  x(n)=x(n-1)+(n-2)+...+(n-n)
else{
  for (int i = 1; i < n; i++) {
   result += i;
  }
}
  return result;
}



int main(){

int aux;
// para que ele peça repetidamente um valor e so pare o programa quando o n=0 ou n=1
do
{
cout << " Introduza um valor  nao negativo:" <<endl;
cin>> aux;

cout << fiab(aux) <<endl;
}while(aux!=0  && aux!=1);

system("pause");
return (0);
}

este e o meu código... e mesmo com o que me disses-te agora KTachyon , da-me um valor negativo para o exemplo do 4  :S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
DiogoRibeiro    0
DiogoRibeiro

ja inicializei, no entanto agora ele retorna-me o valor que eu coloco >2.. se colocar 2 ele da-me dois, se colocar 3 ele da-me 3  :S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
HappyHippyHippo    1134
HappyHippyHippo

faz a simplificação da função e terás :

(n-1)+(n-2)+(n-3)+...+(n-n-1)+(n-n) =

(n-1)+(n-2)+(n-3)+...+1+0

invertendo a ordem:

0+1+2+3+..+(n-2)+(n-1)

PS : ignora o meu post anterior ...

as contas estao correctas ... tenta com um valor maior e verifica qual o valor de inicializacao do result

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
KTachyon    272
KTachyon

Coloquei int result = 0;, e compilei o código que mostraste e isto foi o resultado que obtive:

ref03:~ KTachyon$ ./a.out
Introduza um valor  nao negativo:
2
1
Introduza um valor  nao negativo:
3
3
Introduza um valor  nao negativo:
4
6
Introduza um valor  nao negativo:
5
10
Introduza um valor  nao negativo:
6
15
Introduza um valor  nao negativo:
7
21
Introduza um valor  nao negativo:
8
28
Introduza um valor  nao negativo:
9
36
Introduza um valor  nao negativo:
1
2
ref03:~ KTachyon$ ./a.out
Introduza um valor  nao negativo:
0
1

Parece-me correcto, à excepção do 1 e do 0 que não deveriam mostrar resultado (acho), mas acontece porque estás a imprimir sem validar o input do utilizador.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade