Avatar billede lifehacker Nybegynder
27. august 2008 - 13:34 Der er 9 kommentarer

Lineært Rekursion - er i tvivl!

Hej med jer,


1.) Jeg prøver at finde ud af hvordan denne kode virker, efter at have copy/pastet fra nogle sites og lavet min egen version af den. Pointen er at jeg skal vise lineært rekursion, men har ikke helt fantasi til hvordan jeg skal printe de forskellige retur værdier som jeg har i mine if-sætninger.

2.) Og, hvad gør denne linie: return (n* Fact(n-1)); - er det gange eller er det en pointer?? Nej vel.. ?


Kode

#include <iostream>
using namespace std;

int Fact(long n) {
return (n* Fact(n-1));

}

int main () {

int n;


cout << "enter a number: " << endl;
cin >> n;


if (n>0) {

    return -1;
   
}

if (n==0) {
    return 1;

}

}



Nogle forslag?
Avatar billede jakobdo Ekspert
27. august 2008 - 13:36 #1
2 point, hvor gavmildt... :o)
Avatar billede arne_v Ekspert
27. august 2008 - 13:48 #2
re 1)

Den virker ikke. Da du ikke har nogen stop for din rekursion.

re 2)

* der er en helt normal pointer.
Avatar billede lifehacker Nybegynder
27. august 2008 - 14:15 #3
Nå ok... dumt eksempel, må finde noget andet på en simpel lineær rekursion.
Du har vel ikke nogle forslag? Altså super simple :-)
Avatar billede bitmatic Nybegynder
27. august 2008 - 14:35 #4
Det er ikke en pointer.... Det er gange.

Det er et forsøg på at implementere det klassiske rekursions-eksempel. Fakultet.

Du skal blot ændre din funktion til

int Fact(long n)
{
  if(number <= 1) return 1;
  else return (n* Fact(n-1));
}

Så burde det virke.
Avatar billede bitmatic Nybegynder
27. august 2008 - 14:39 #5
... funktionen virker i øvrigt kun med positive tal.

Hvis du vil vide mere så: http://www.cs.waikato.ac.nz/Teaching/COMP134B/2005/recursion.pdf
Avatar billede arne_v Ekspert
27. august 2008 - 15:01 #6
bitmatic har naturligvis ret - det er en helt normal gange - ikke en pointer
Avatar billede lifehacker Nybegynder
27. august 2008 - 16:00 #7
Kan ikke helt finde ud af det... hvor skal jeg erklære "number" ? 


#include <iostream>
using namespace std;

int Fact(long n)
{
  if(number< = 1) return 1;
  else return (n* Fact(n-1));
}


int main () {

int n, number; // her går det ikke siger min compiler


cout << "enter a number: " << endl;
cin >> n;


if (n>0) {

    return -1;
   
}

if (n==0) {
    return 1;

}

}
Avatar billede lifehacker Nybegynder
27. august 2008 - 16:02 #8
Tak for linket i øvrigt, det er meget godt!
Avatar billede bitmatic Nybegynder
27. august 2008 - 20:11 #9
argh... min fejl. Det sker når man laver copy/paste. Du skal slet ikke bruge number.


Funktionen skal se sådan her ud:
int Fact(long n)
{
  if(n <= 1) return 1;
  else return (n* Fact(n-1));
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester