Chapter 04 Procedural Abstraction - Function
5. Recursive Function
A recursive function is a function that calls itself directly or indirectly in its body.
5.1 Divide and Conquer
When defining a recursive function, we must clarify general case and base case.
Example: Fibonacci
int fib(int n) {
if (n == 1 || n == 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
When choosing between iteration and recursion, if there isn’t many steps, recursion can reduce code lines while there is may steps, maximum recursion depth will be exceeded so we have to choose iteration.
However, when we lean further, we can solve the problem of maximum recursion depth exceeding by dynamic programming.
Example: Power
double power(double x, int n){
if (x == 0) return 0;
if (n == 0)
return 1;
else if(n > 0)
return x * power(x, n - 1);
else
return 1 / power(x, -n);
}
Example: Greatest Common Divisor
int gcd(int x, int y){
return (y == 0) ? x : gcd(y, x % y);
}
Example: Hanoi
void hanoi(char x, char y, char z, int n) {
if (n == 1)
cout << "1: " << x << "->" << y << endl;
else {
hanoi(x, z, y, n - 1);
cout << n << ": " << x << "->" << y << endl;
hanoi(z, y, x, n - 1);
}
}
5.2 Standard Library
Some bonus from the language designer and developer.