Eine Funktion, die in etwa die pow funktion realisiert (einige
Sonderfälle werden nicht korrekt behandelt, z.B. für
)
double pow (double x, double y) { int negative = 0; double result; if (y == 0.0) /* x^0 = 1 */ return 1.0; if (x == 0.0) /* 0^y = 0 */ return 0.0; if (y < 0){ /* x^-y = 1/(x^y) */ negative = 1 y=-y; } result = exp(x*log(y)); if (negative) return 1.0/result; return result; }
Das nächste Beispiel berechnet die -te Fibonaccizahl
unsigned long fibonacci (unsigned n) /* F-Zahlen koennen sehr gro"s werden */ { unsigned long vorletzte = 0; unsigned long letzte = 1; unsigned long aktuelle; if(n <= 1) return n; while(n-- > 1){ aktuelle = letzte + vorletzte; vorletzte = letzte; letzte = aktuelle; } return aktuelle; }
Die kann man aber noch viel kürzer schreiben:
/* F-Zahlen koennen sehr gro"s werden */ unsigned long fibonacci (unsigned long n) { if(n <= 1) return n; return fibonacci(n-1) + fibonacci (n-2); }
Eine Funktion, die sich selbst wieder aufruft, heißt rekursiv. Das letzte Beispiel ist die rekursive Variante der Fibonacci-Funktion.