CS 3343/3341 Introduction to Algorithms Spring 2012 |
Fibonacci Numbers: Levels of Nesting of Recursive Calls |

| Fibonacci Numbers | |
|---|---|
| Java | C |
// Fib.java: calculate nth Fibonacci #
public class Fib {
private int level = 0; // recursion level
int f(int n) {
if (n <= 1) return n;
return f(n - 1) + f(n - 2);
}
void levout(int level) { // recurs level
for( ; level > 1; level--)
System.out.print("| ");
System.out.print("+");
}
int F(int n) {
int val1, val2; // values returned
level++;
levout(level);
System.out.println("Input: " + n);
if (n <= 1) {
levout(level);
System.out.println("Return: " + n);
level--;
return n;
}
val1 = F(n - 1); // recursive call
val2 = F(n - 2); // recursive call
levout(level);
System.out.println("Return: " +
(val1 + val2));
level--;
return val1 + val2;
}
public static void main(String[] args) {
Fib fib = new Fib();
int n = Integer.parseInt(args[0]);
System.out.println("f[" + n + "] = " +
fib.f(n));
System.out.println("F[" + n + "] = " +
fib.F(n));
}
} | // fib.c: calculate nth Fibonacci #
#include <stdio.h>
int f(int n) {
if (n <= 1) return n;
return f(n - 1) + f(n - 2);
}
void levout(int level) {
for( ; level > 1; level--)
printf("| ");
printf("+");
}
int F(int n) {
static int level = 0;
int val1, val2;
level++;
levout(level);
printf("Input: %i\n", n);
if (n <= 1) {
levout(level);
printf("Return: %i\n", n);
level--;
return n;
}
val1 = F(n - 1);
val2 = F(n - 2);
levout(level);
printf("Return: %i\n", val1 + val2);
level--;
return val1 + val2;
}
void main(void) {
int n;
scanf("%i", &n);
printf("F[%i] = %i\n", n, f(n));
printf("F[%i] = %i\n", n, F(n));
}
|
| Common output | ||||
|---|---|---|---|---|
| n = 1 to 4 | n = 5 | n = 6 | n = 7 | |
f[1] = 1 +Input: 1 +Return: 1 F[1] = 1 | f[5] = 5 +Input: 5 | +Input: 4 | | +Input: 3 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | | +Input: 1 | | | +Return: 1 | | +Return: 2 | | +Input: 2 | | | +Input: 1 | | | +Return: 1 | | | +Input: 0 | | | +Return: 0 | | +Return: 1 | +Return: 3 | +Input: 3 | | +Input: 2 | | | +Input: 1 | | | +Return: 1 | | | +Input: 0 | | | +Return: 0 | | +Return: 1 | | +Input: 1 | | +Return: 1 | +Return: 2 +Return: 5 F[5] = 5 | f[6] = 8 +Input: 6 | +Input: 5 | | +Input: 4 | | | +Input: 3 | | | | +Input: 2 | | | | | +Input: 1 | | | | | +Return: 1 | | | | | +Input: 0 | | | | | +Return: 0 | | | | +Return: 1 | | | | +Input: 1 | | | | +Return: 1 | | | +Return: 2 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | +Return: 3 | | +Input: 3 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | | +Input: 1 | | | +Return: 1 | | +Return: 2 | +Return: 5 | +Input: 4 | | +Input: 3 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | | +Input: 1 | | | +Return: 1 | | +Return: 2 | | +Input: 2 | | | +Input: 1 | | | +Return: 1 | | | +Input: 0 | | | +Return: 0 | | +Return: 1 | +Return: 3 +Return: 8 F[6] = 8 | f[7] = 13 +Input: 7 | +Input: 6 | | +Input: 5 | | | +Input: 4 | | | | +Input: 3 | | | | | +Input: 2 | | | | | | +Input: 1 | | | | | | +Return: 1 | | | | | | +Input: 0 | | | | | | +Return: 0 | | | | | +Return: 1 | | | | | +Input: 1 | | | | | +Return: 1 | | | | +Return: 2 | | | | +Input: 2 | | | | | +Input: 1 | | | | | +Return: 1 | | | | | +Input: 0 | | | | | +Return: 0 | | | | +Return: 1 | | | +Return: 3 | | | +Input: 3 | | | | +Input: 2 | | | | | +Input: 1 | | | | | +Return: 1 | | | | | +Input: 0 | | | | | +Return: 0 | | | | +Return: 1 | | | | +Input: 1 | | | | +Return: 1 | | | +Return: 2 | | +Return: 5 | | +Input: 4 | | | +Input: 3 | | | | +Input: 2 | | | | | +Input: 1 | | | | | +Return: 1 | | | | | +Input: 0 | | | | | +Return: 0 | | | | +Return: 1 | | | | +Input: 1 | | | | +Return: 1 | | | +Return: 2 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | +Return: 3 | +Return: 8 | | +Input: 5 | | +Input: 4 | | | +Input: 3 | | | | +Input: 2 | | | | | +Input: 1 | | | | | +Return: 1 | | | | | +Input: 0 | | | | | +Return: 0 | | | | +Return: 1 | | | | +Input: 1 | | | | +Return: 1 | | | +Return: 2 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | +Return: 3 | | +Input: 3 | | | +Input: 2 | | | | +Input: 1 | | | | +Return: 1 | | | | +Input: 0 | | | | +Return: 0 | | | +Return: 1 | | | +Input: 1 | | | +Return: 1 | | +Return: 2 | +Return: 5 +Return: 13 F[7] = 13 |