Recursion Factorial 6 654321 Factorial 75 Factorial 75
- Slides: 52
Recursion
Factorial! 6! = 6*5*4*3*2*1
Factorial! 75! = ? ? ?
Factorial! 75! = 75*74!
Factorial! 75! = 75*74! Defined in terms of itself
Factorial! 75! = 75*74! To solve this problem, we need to figure out 74!
Factorial! 74! = 74*73! 75! = 75*74! To solve this problem, we need to figure out 73!
Factorial! 73! = 73*72! 74! = 74*73! 75! = 75*74! To solve this problem, we need to figure out 72! When would it stop?
Factorial! In general… n! = n*(n-1)!
Recursion • When a method calls itself – Easy to identify – Going to create “clones” of the function – Usually, the clone has a smaller problem to work • Requirements – Must have the recursive call – Must have a terminating condition – Must make progress towards terminating
int factorial (int n) { if (n == 1) { return 1; } else { return n * factorial(n-1); } } void main () { int f = factorial(4); }
static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); }
static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } function stack
static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } main f = factorial(4)
n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) main f = factorial(4)
n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) main f = factorial(4)
Output 4 n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) main f = factorial(4)
Output 4 n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) main f = factorial(4)
Output 4 n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) main f = factorial(4)
Output 4 n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } Pending Work! void main () { int f = factorial(4); Console. Write. Line(f); } fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(3) fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 3 n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(3) fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 3 n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(3) fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 3 n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } fact(3) result = 3 * factorial(2) fact(4) result = 4 * factorial(3) main f = factorial(4)
Output 4 3 n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } Pending Work! void main () { int f = factorial(4); Console. Write. Line(f); } fact(3) result = 3 * factorial(2) fact(4) result = 4 * factorial(3) main f = factorial(4)
Output n == 2 4 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) result = 3 * factorial(2) int f = factorial(4); Console. Write. Line(f); fact(4) result = 4 * factorial(3) } main f = factorial(4)
Output n == 2 4 3 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) result = 3 * factorial(2) int f = factorial(4); Console. Write. Line(f); fact(4) result = 4 * factorial(3) } main f = factorial(4)
Output n == 2 4 3 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) result = 3 * factorial(2) int f = factorial(4); Console. Write. Line(f); fact(4) result = 4 * factorial(3) } main f = factorial(4)
Output n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main 4 3 2 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Output n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } Pending Work! fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main 4 3 2 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Output n == 1 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main 4 3 2 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Output n == 1 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main 4 3 2 1 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Output n == 1 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main 4 3 2 1 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
We “terminated” n == 1 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 return 1 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 return 1 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } fact(1) } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 return 1 result = 2 * factorial(1) result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 result = 2 * 1 result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 2 result = 2 * 1 = 2 result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 2 result = 2 * 1 = 2 result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 2 result = 2 * 1 = 2 result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… n == 2 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } fact(2) void main () { fact(3) int f = factorial(4); Console. Write. Line(f); fact(4) } main Output 4 3 2 1 2 result = 2 * 1 = 2 result = 3 * factorial(2) result = 4 * factorial(3) f = factorial(4)
Collapse the stack… Output n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 fact(3) result = 3 * 2 = 6 fact(4) result = 4 * factorial(3) main f = factorial(4)
Collapse the stack… Output n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 fact(3) result = 3 * 2 = 6 fact(4) result = 4 * factorial(3) main f = factorial(4)
Collapse the stack… Output n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 fact(3) result = 3 * 2 = 6 fact(4) result = 4 * factorial(3) main f = factorial(4)
Collapse the stack… Output n == 3 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 fact(3) result = 3 * 2 = 6 fact(4) result = 4 * factorial(3) main f = factorial(4)
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 fact(4) result = 4 * 6 = 24 main f = factorial(4)
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 4 fact(4) result = 4 * 6 = 24 main f = factorial(4)
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 4 fact(4) result = 4 * 6 = 24 main f = factorial(4)
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } void main () { int f = factorial(4); Console. Write. Line(f); } 4 3 2 1 2 3 4 fact(4) result = 4 * 6 = 24 main f = factorial(4)
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } 4 3 2 1 2 3 4 void main () { int f = factorial(4); Console. Write. Line(f); } main f = 24
Collapse the stack… Output n == 4 static int factorial (int n) { Console. Write. Line(n); if (n == 1) { return 1; } else { int result = n * factorial(n-1); Console. Write. Line(n); return result; } } 4 3 2 1 2 3 4 24 void main () { int f = factorial(4); Console. Write. Line(f); } main f = 24
- To understand recursion you must understand recursion
- Jens parse
- Recursion vs loop
- Box trace recursion
- Tail recursion in java
- For top down parsing left recursion removal is
- Recursion time complexity
- Recursive pronouns
- Recursion time complexity
- Induction and recursion discrete mathematics
- özyineleme
- What is inline function
- Selection sort using recursion
- Tail recursion vs iteration
- Recursion google
- Telic recursion
- N factorial
- Matlab recursion
- Left recursion
- Recursion
- Ap cs recursion
- Slr parser example
- Recursively defined sets
- Recursion
- Recursion
- Pingo upb
- Recursion in assembly language 8086
- Recursion
- Binary search in mips
- Tracing recursion
- Recursive thinking definition
- Recursion language
- For top down parsing left recursion removal is
- Recursive function mips
- Advanced recursion problems
- Recursion in java
- Recursion
- Recursion nedir
- Recursion discrete math
- Recursion equation
- Recursion tree example
- Generative recursion
- Recursion error fanfic
- Recurcive
- Recursion
- Handshake problem formula
- Prolog recursion
- Linear recursion
- Vba recursion
- Clojure factorial
- Recursion
- Recursion java