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 |