Avatar billede onkel_satan Nybegynder
14. september 2004 - 21:19 Der er 3 kommentarer og
1 løsning

recursive funktion ?

Hejsa!

Sidder og leger lidt med recursive funktioner. Har lavet en der vender en tekst om ved at udskrive den. Koden er som følger:
void reverseString(char *pThis){
    char* pNext;
    if(*pThis == '\0')
        ;
    else{
        pNext = pThis+1;
        reverseString(pNext);
        printf("%c", *pThis);
    }
}

Men så var det jeg tænkte om man ikke kunne få den til at vende teksten om uden at udskrive den. Sådan så næste gang at man udskriver teksten så er den vendt om. Altså vende den permanent kan man vel sige.

På forhånd tak.
Avatar billede arne_v Ekspert
14. september 2004 - 21:26 #1
#include <iostream>
#include <cstring>

using namespace std;

void revrec(char *s,int l)
{
  char tmp;
  if(l > 1)
  {
      tmp = s[0];
      s[0] = s[l-1];
      s[l-1] = tmp;
      revrec(s+1,l-2);
  }
}

void rev(char *s)
{
  revrec(s, strlen(s));
}

int main()
{
  char s[] = "12345";
  rev(s);
  cout << s << endl;
  return 0;
}
Avatar billede arne_v Ekspert
14. september 2004 - 21:27 #2
Jeg tror iøvrigt ikke at jeg ville lave det rekursivt !!
Avatar billede onkel_satan Nybegynder
14. september 2004 - 21:40 #3
Cool takker.

"Jeg tror iøvrigt ikke at jeg ville lave det rekursivt !!"

Næhh.. heller ikke mig, men ind til videre er halvdelen af de opgaver jeg fået på mit c kursus blevet bedt om at lave dem som recursive funktioner, eller sådan føles det i hvert fald ;-)
Og da de godt kan være lidt tricky at forstå, ville jeg lige prøve og sætte mig lidt mere ind i deres anvendelse.
Avatar billede arne_v Ekspert
14. september 2004 - 21:55 #4
Her er en anden version:

#include <iostream>
#include <cstring>

using namespace std;

void revrec(char *s1,char *s2)
{
  char tmp;
  if(s2 > s1)
  {
      tmp = *s1;
      *s1 = *s2;
      *s2 = tmp;
      revrec(s1+1,s2-1);
  }
}

void rev(char *s)
{
  revrec(s, s + strlen(s) - 1);
}

int main()
{
  char s[] = "12345";
  rev(s);
  cout << s << endl;
  char s2[] = "abcd";
  rev(s2);
  cout << s2 << endl;
  return 0;
}
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