Functions
Recursion
A recursive function solves a problem by calling itself on a smaller input.
base case
The base case stops the recursion.
recursive case
The recursive case calls the same function with a smaller value.
Recursion
recursion.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
int main(void) {
int n = 4;
int result = factorial(n);
printf("factorial=%d\n", result);
return 0;
}
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
int main(void) {
int n = 3;
int result = factorial(n);
printf("factorial=%d\n", result);
return 0;
}
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
}
return n * factorial(n - 1);
}
int main(void) {
int n = 5;
int result = factorial(n);
printf("factorial=%d\n", result);
return 0;
}
n ← 4
10int main(void) {11 int n→ 4 = 4; //@n=3, 512 int result = factorial(n4);int factorial(int n)
pass 1 of 43int factorial(int n4) {4 if (n <= 1) {5 return 1;6 }7 return n4 * factorial(n - 1);8}All 4 passes — pass 1 is the card above pass n1 4 2 3 3 2 4 1 if (n <= 1)
3int factorial(int n) {4 if (n1 <= 1) {5 return 1;6 }result ← 24
11 int n = 4; //@n=3, 512 int result→ 24 = factorial(n4);1314 printf("factorial=%d\n", result24);15 return 0;16}outputfactorial=24
n ← 3
10int main(void) {11 int n→ 3 = 3;12 int result = factorial(n3);int factorial(int n)
pass 1 of 33int factorial(int n3) {4 if (n <= 1) {5 return 1;6 }7 return n3 * factorial(n - 1);8}All 3 passes — pass 1 is the card above pass n1 3 2 2 3 1 if (n <= 1)
3int factorial(int n) {4 if (n1 <= 1) {5 return 1;6 }result ← 6
11 int n = 3;12 int result→ 6 = factorial(n3);1314 printf("factorial=%d\n", result6);15 return 0;16}outputfactorial=6
n ← 5
10int main(void) {11 int n→ 5 = 5;12 int result = factorial(n5);int factorial(int n)
pass 1 of 53int factorial(int n5) {4 if (n <= 1) {5 return 1;6 }7 return n5 * factorial(n - 1);8}All 5 passes — pass 1 is the card above pass n1 5 2 4 3 3 4 2 5 1 if (n <= 1)
3int factorial(int n) {4 if (n1 <= 1) {5 return 1;6 }result ← 120
11 int n = 5;12 int result→ 120 = factorial(n5);1314 printf("factorial=%d\n", result120);15 return 0;16}outputfactorial=120