1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

rekursive Funktion terminiren

  • hepp
  • 13. Mai 2007 um 15:28
  • Unerledigt
  • hepp
    3
    hepp
    Mitglied
    Punkte
    70
    Beiträge
    10
    • 13. Mai 2007 um 15:28
    • #1

    Hi
    Ich habe keine ahnung wie ich eine rekursive Funktion terminiren, die keine Schleife, keine if-Anweisung, keine switch-Anweisung und auch keine bedingte Auswertung (? :) enthält, die aber trotzdem terminiert :frowning_face:

    Ich brauche nur eine Idea :wein:kein fertiges program.

  • ThomasW
    4
    ThomasW
    Mitglied
    Reaktionen
    1
    Punkte
    141
    Beiträge
    28
    • 13. Mai 2007 um 15:41
    • #2

    Wenn Du auch C++ verwendest, könntest Du eine Exception werfen.

    zB könntest Du einen wert mitgeben, durch den Du bei jedem Aufruf dividierst. Wenn er 0 ist, wird eine exception geworfen.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 13. Mai 2007 um 15:52
    • #3

    Faellt das unter "bedingte Auswertung"?

    Code
    #include "stdio.h"
    
    
    int foo(int n){
      printf("%i\n",n);
    
      //weil in C 0 == false ist, wird die 
      //recursion nur aufgerufen, wenn n != 0 ist.
      n && foo(n-1); 
    }
    
    
    int main(){
      foo(10);
    }
    Alles anzeigen


    http://www.lysator.liu.se/c/bwk-tutor.html#if

    Wer stellt denn so gemeine Fragen? :)

    lg, Benjamin Ferrari, bookworm.at

  • hepp
    3
    hepp
    Mitglied
    Punkte
    70
    Beiträge
    10
    • 13. Mai 2007 um 18:29
    • #4
    Zitat von a9bejo

    Faellt das unter "bedingte Auswertung"?

    Code
    #include "stdio.h"
    
    
    int foo(int n){
      printf("%i\n",n);
    
      //weil in C 0 == false ist, wird die 
      //recursion nur aufgerufen, wenn n != 0 ist.
      n && foo(n-1); 
    }
    
    
    int main(){
      foo(10);
    }
    Alles anzeigen

    http://www.lysator.liu.se/c/bwk-tutor.html#if

    Wer stellt denn so gemeine Fragen? :)


    C++ Anfänger :) .
    Danke für die antwort.

  • _Linuxhippy
    6
    _Linuxhippy
    Mitglied
    Reaktionen
    1
    Punkte
    376
    Beiträge
    64
    • 13. Mai 2007 um 23:39
    • #5
    Zitat


    //weil in C 0 == false ist, wird die
    //recursion nur aufgerufen, wenn n != 0 ist.
    n && foo(n-1);

    Bei Java weiß ichs, aber ist dieses Verhalten bei C++ auch standardisiert?

    lg Clemens

    To avoid horrible confusion, please pronounce the G in the word GNU when it is the name of this project.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 13. Mai 2007 um 23:58
    • #6

    In C ist es zumindest so:
    "Expressions connected by && and :tired_face: are evaluated left to right, and
    evaluation stops as soon as the truth or falsehood of the result is known." (K&R)

    "Relational expressions like i > j and logical expressions connected by &&
    and :tired_face: are defined to have value 1 if true, and 0 if false." (K&R)

    lg, Benjamin Ferrari, bookworm.at

  • Paulchen
    1
    Paulchen
    Gast
    • 14. Mai 2007 um 00:05
    • #7
    Zitat von _Linuxhippy

    Bei Java weiß ichs, aber ist dieses Verhalten bei C++ auch standardisiert?

    Zitat von a9bejo

    In C ist es zumindest so

    In C++ auch.

    Aus ISO/IEC 14882:1998, Seite 88:

    Zitat

    [...] Unlike &, && guarantees left-to-right evaluation: the second operand is not evaluated if the first operand is false. [...]

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung