SS 2025
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
/* Informatik B - Sommersemester 2023
|
||||
Vorlesung am 03.05.2023
|
||||
Katharina Klost
|
||||
|
||||
Weiteres Beispiel zur Rekursion
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
/*
|
||||
Voraussetzung: n ist größer als 0
|
||||
Ergebnis: Wenn Collatz mit n/2 terminiert ist true geliefert
|
||||
Effekt: keiner
|
||||
*/
|
||||
bool c1(unsigned);
|
||||
|
||||
|
||||
/*
|
||||
Voraussetzung: n ist größer als 0
|
||||
Ergebnis: Wenn Collatz mit 3*n+1 terminiert ist true geliefert
|
||||
Effekt: keiner
|
||||
*/
|
||||
bool c2(unsigned);
|
||||
|
||||
/*
|
||||
Voraussetzung: n ist größer als 0
|
||||
Ergebnis: true, wenn die Collatzfolge von n aus terminiert
|
||||
Effekt: gibt aktuellen Wert n aus
|
||||
*/
|
||||
bool collatz(unsigned);
|
||||
|
||||
bool c1(unsigned n){
|
||||
return collatz(n/2);
|
||||
}
|
||||
|
||||
bool collatz(unsigned n){
|
||||
std::cout << n << std::endl;
|
||||
if (n==1){
|
||||
return true;
|
||||
}
|
||||
// !(n%2) ist true, wenn n gerade ist. Dies kann wie folgt gesehen werden:
|
||||
// für gerade n ist n%2 == 0. Das Anwenden von ! interpretiert die 0 dann als
|
||||
// false, dieses wird negiert und damit wird der Ausdruck zu true ausgewertet.
|
||||
// Etwas länger aber evtl besser zu lesen wär (n%2 == 0).
|
||||
if (!(n%2)){
|
||||
return c1(n);
|
||||
}else{ // n ungerade
|
||||
return c2(n);
|
||||
}
|
||||
}
|
||||
|
||||
bool c2(unsigned n){
|
||||
return collatz(3*n+1);
|
||||
}
|
||||
|
||||
int main(){
|
||||
int n;
|
||||
std::cout << "Gebe eine Zahl ein: ";
|
||||
std::cin >> n;
|
||||
collatz(n);
|
||||
std::cout << "terminated" << std::endl;
|
||||
}
|
||||
Reference in New Issue
Block a user