View Full Version : às cabeçadas com recorrencias em C


marzvolta
24-10-2004, 17:47
Boas, estou eu aqui a estudar para um teste de AED que vou ter na 3ª e estou a estudar funçoes recursivas, fazer uns exercicios e tal, e apareceram-me estes 2 problemas (basicos):
1. Write a function using Recursion to print numbers from n to 0.

2. Write a function using Recursion to print numbers from 0 to n. (You just need to shift one line in the program of problem 1.)

faço o 1º com facilidade:
---------------------------------------------------------------------------
#include <stdio.h>
#define N 10

int print(int n){

while(n>0){
printf("%d\n",n) ;
return print(n-1);
}
}
main()
{
print(N);

}
---------------------------------------------------------------------------
quanto ao 2º, por incrivel que pareça, nao consegui perceber a "dica" que dao no enunciado, a maneira que eu arranjei de o resolver foi:
---------------------------------------------------------------------------
#include <stdio.h>
#define N 10

int print(int n){

if(n<=N){
printf("%d\n",n) ;
return print(n+1);

}
}
main()
{
print(0);

}
---------------------------------------------------------------------------

alguem me poderia explicar aki ao burro a maneira ultra facil utilizando a "dica" que dao?
atenciosamente,
[]

diablos
24-10-2004, 18:36
Epa n te quero estar a enganar mas tanto quanto sei, n está correcto usares um while dado que tu por cada vez que chamas a função so precisas que ela imprima 1 vez, por isso aqui vai a minha solução, mas olha que eu n sou de fiar :D.

void print(int n){

if(n == 0){
printf("%d\n", n);
return;
}
else{
printf("%d\n", n);
print(n - 1);
return;
}
}

int main(){

print(N);
return 0
}


quanto a troca de linha axo que é:


void print(int n){

if(n == 0){
printf("%d\n", n);
return;
}
else{
print(n - 1); /* trocas esta linha com a linha abaixo para ele ir recursivamente imprimir o N por ordem crescente */
printf("%d\n", n);
return;
}
}

int main(){

print(N);
return 0
}


Espero ter ajudado, alguma duvida ja sabes [[[]]]

marzvolta
24-10-2004, 18:47
hmmm indeed, obrigado,
estou um bocado a nora com funçoes recursivas..so mm a factorial :x2:
if ( n == 0) return 1;

return fact(n-1)*n
:x2: :x2: