1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

rekursive Funktion terminiren

  • hepp
  • 13. Mai 2007 um 15:28
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • hepp
    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 :(

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

  • ThomasW
    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
    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? :)

  • hepp
    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
    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

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

    In C ist es zumindest so:
    "Expressions connected by && and || 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 || are defined to have value 1 if true, and 0 if false." (K&R)

  • 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.

  1. Datenschutzerklärung
  2. Impressum