Recursividade [Dúvida] [RESOLVIDO]

1. Recursividade [Dúvida] [RESOLVIDO]

Wilson Nilo
WNA

(usa Ubuntu)

Enviado em 05/05/2015 - 19:28h

Olá, boa noite pessoal do VOL.
Estou com um problema para entender função recursiva.
Gostaria de saber se o codigo abaixo possui esse tipo de função:
#include <stdio.h>
#include<stdlib.h>

int total,pos,cont;
int valor1,valor2;

int calc(){	
	total = valor1+valor2;
	valor1=valor2;
	valor2=total;	
	cont--;
	if(cont > 1 ){		
		calc();
			}
}

int fib(){
	total=0;
	int v1=0,v2=1;
	for(int i=1;i<20;i++){
		total = v1+v2;
		v1=v2;
		v2=total;				
	}
	
		
}
int main(){
	printf("Informe a posicao desejada: ");
	scanf("%d",&pos);
	cont=pos;
	valor1=0,valor2=1;
	fib();
	printf("O numero com posicao 20 e: %d \n",total);			
	calc();
	printf("O numero com posicao %d e: %d ",pos,total);				
		
} 

Produzi esse código, porém o rapaz que esta corrigindo, fala que esse codigo acima não possui uma função recursiva.
Entretanto a norma diz que uma afirma que:Recursão é o processo pelo qual uma função chama a si
mesma, repetidamente, um numero finito de vezes;
Nesse conceito a questão não estaria correta?
Caso não me desculpe, poderia me dar um exemplo melhor que eu pode-se entender.
Desde já agradeço a atenção



  


2. Re: Recursividade [Dúvida]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/05/2015 - 19:57h

Amigo, na verdade esse código não possui recursividade.

Posso fazer um exemplo:


#include <stdio.h>

void recursiveFunction(int num){
   if (num < 20){
      printf("%d\n", num);           
      recursiveFunction(num + 1);           
   }
}



int main(void){
	printf("Digite um numero: ");
	int x;
	scanf("%d",&x);
	recursiveFunction(x);
	return 0;
}
 


Irá imprimir:


Digite um numero: 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 



Entretanto a norma diz que uma afirma que:Recursão é o processo pelo qual uma função chama a si
mesma, repetidamente, um numero finito de vezes;

Bom, é funções com retorno de valor, pois se você chama a função com o numero x e ela se chama passando como argumento x + 1 até que tenha um retorno, break ou algo parecido.Nessa exemplo, o utilizado foi o "if(num < 20)".

Se tiver mais alguma dúvida só me mandar um e-mail : thihup@gmail.com, pedir aqui no VOL ou me adicionar no skype: thihup

Espero ter ajudado

[]'s

T+


3. Re: Recursividade [Dúvida] [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 05/05/2015 - 20:10h

Não é à toa que uma das melhores explicações sobre recursividade eu vi no vidadeprogramador.com.br: para entender recursividade é preciso antes entender recursividade.
--
Luís Fernando Carvalho Cavalheiro
Public GPG signature: 0x246A590B
Só Slackware é GNU/Linux e Patrick Volkerding é o seu Profeta


4. Re: Recursividade [Dúvida] [RESOLVIDO]

Wilson Nilo
WNA

(usa Ubuntu)

Enviado em 05/05/2015 - 20:46h

Pessoal obrigado pelas explicações o código abaixo agora está corresponde agora a uma função recursiva ?

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

int calc( int valor){	

	if(valor==0 ||valor==1){
	return (valor);
	}else{
		return calc(valor-1) + calc(valor-2);		
	}
}
int fib(){
		return calc(20-1) + calc(20-2);			
}
int main(){
	int pos;
	printf("Informe a posicao desejada: ");
	scanf("%d",&pos);
	fib();
	printf("O numero com posicao 20 e: %d \n",fib());			
	calc(pos);
	printf("O numero com posicao %d e: %d ",pos,calc(pos));				
		
} 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts