Jump to content

Recursão


askazy
 Share

Recommended Posts

Boa noite pessoal, o exercício é o seguinte:

1) Crie uma função recursiva que conte o numero de dígitos pares de um número dado, no intervalo [1,2147483647]

Eu fiz a seguinte função:

#include <stdio.h>
int cont=0;
int qpares (int n)
{
   int x;
   x=n%10;
   if (n==0)
    return 0;
   if (x%2==0) cont++;
   qpares(n/10);
   return cont;
}

int main ()
{
   int n,x;
   scanf ("%d",&n);
   x=qpares(n);
   printf ("%d\n",x);
   return 0;
}

Minha dúvida é como eu faço pra colocar o cont dentro da função recursiva, porque eu tenho que inicializar ela como 0, e toda vez que a função chamar ela mesma o cont vai ficar 0. Tem como fazer isso sem usar variável global?

Link to comment
Share on other sites

Tu estás a tentar simular um ciclo usando variáveis globais. Esse não é o objectivo da recursividade.

Isto é uma função recursiva:

long fact(short n) {
  return (n==0 || n==1) ? 1 : n*fact(n-1);
}

Uma função recursiva chama-se a si mesma para resolver o problema mas sem recurso a "truques" como variáveis globais. Existem, aliás, linguagens, como Haskell, que são totalmente recursivas e não têm o conceito de "variável". Portanto, nada de variáveis externas à função.

Uma dica: vou fazer uma função recursiva que vai dizer quantos dígitos tem um número:

int countdigits(int n) {
  if (n==0) return 0;
  else return 1+countdigits(n/10);
}
Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Não podes usar cont. Reparaste bem no meu exemplo? Eu não usei nenhuma variável para fazer a contagem do nº de dígitos que um número tem.

Verdade seja dita, basicamente dei-te a solução... olha bem para o código-exemplo que fiz.

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.