web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · disclaimer...
TRANSCRIPT
![Page 1: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/1.jpg)
Collections, Part Four
![Page 2: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/2.jpg)
Announcements
● Assignment 1 due right now.● Due Wednesday with one late day and Friday
with two late days.
● Assignment 2 (Fun with Collections) out, due Wednesday, April 24 at 2:15PM.● Explore the different collections classes!● Teach the computer to write!
![Page 3: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/3.jpg)
Queue
![Page 4: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/4.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
137
![Page 5: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/5.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
137 42
![Page 6: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/6.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
137 42 271
![Page 7: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/7.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
42 271
![Page 8: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/8.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
42 271 314
![Page 9: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/9.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
271 314
![Page 10: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/10.jpg)
Queue
● A Queue is a data structure representing a waiting line.
● Objects can be enqueued to the back of the line or dequeued from the front of the line.
● No other objects in the queue are visible.● Example: A checkout counter.
314
![Page 11: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/11.jpg)
Listing All Strings
● Suppose we want to generate all strings of letters A and B of length at most three.
● How might we do this?
![Page 12: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/12.jpg)
"" "A" "B" "AA" "AB" "BA" "BB"
![Page 13: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/13.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
![Page 14: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/14.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
![Page 15: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/15.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
![Page 16: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/16.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
""
![Page 17: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/17.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
""
![Page 18: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/18.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
""
![Page 19: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/19.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"" "A" "B"
![Page 20: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/20.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"A" "B"
![Page 21: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/21.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"A"
"B"
![Page 22: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/22.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"A"
"B"
![Page 23: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/23.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"A"
"B"
"AA" "AB"
![Page 24: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/24.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"B" "AA" "AB"
![Page 25: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/25.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"B"
"AA" "AB"
![Page 26: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/26.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"B"
"AA" "AB"
![Page 27: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/27.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"B"
"AA" "AB"
"BA" "BB"
![Page 28: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/28.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AA" "AB" "BA" "BB"
![Page 29: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/29.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AA"
"AB" "BA" "BB"
![Page 30: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/30.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AA"
"AB" "BA" "BB"
![Page 31: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/31.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AB" "BA" "BB"
![Page 32: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/32.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AB"
"BA" "BB"
![Page 33: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/33.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"AB"
"BA" "BB"
![Page 34: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/34.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BA" "BB"
![Page 35: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/35.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BA"
"BB"
![Page 36: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/36.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BA"
"BB"
![Page 37: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/37.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BB"
![Page 38: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/38.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BB"
![Page 39: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/39.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
"BB"
![Page 40: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/40.jpg)
""
"A" "B"
"AA" "AB" "BA" "BB"
![Page 41: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/41.jpg)
Application: Cracking Passwords
![Page 42: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/42.jpg)
Disclaimer
● I am not trying to teach you how to hack into computer systems!
● This lecture (and the start of the next) explores techniques for attacking password systems and for preventing these attacks.
● My intent is to help you better understand computer security and to motivate the techniques from the next section of CS106B.
● Do not use these techniques offensively! It is illegal!
![Page 43: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/43.jpg)
The Setup
● Suppose that you have a mystery function
bool login(string& username, string& password);
● This function takes in a username and password, then tells you whether it is correct.
● Suppose that you know someone's username. How might you break in to their account?
![Page 44: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/44.jpg)
A Brute-Force Attack
● Idea: Try logging in with all possible passwords!● Try logging in with all strings of length 0,
then all strings of length 1, then all strings of length 2, …
● Eventually, this will indeed crack the password.
● What would this look like in code?● How fast will it be?
![Page 45: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/45.jpg)
Analyzing Efficiency
● How long will it take for our program to crack a password?
● Let's make the following assumptions:● The password consists purely of lowercase letters.● The password has length at most n.
● There are 26k possible lowercase strings of length k.
● Might have to try all strings of length 0, 1, …, n.
● To break the password, we need to try at most
different strings.
1+26+262+263
+264+...+26n=
26n+1−125
![Page 46: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/46.jpg)
How Many Strings?
● If n = 0, might have to try 1 string.
● If n = 1, might have to try 27 strings.
● If n = 2, might have to try 703 strings.
● If n = 3, might have to try 18,279 strings.
● …
● If n = 8, might have to try 217,180,147,159 strings.
● …
● If n = 15, might have to try 1,744,349,715,977,154,962,391 strings.
![Page 47: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/47.jpg)
Dictionary Attacks
● Passwords are not random strings; people often use
● words from the dictionary,● simple combinations of numbers,● their birthdays,● etc.
● A dictionary attack is an attack on a password system in which the attacker runs through a list of likely password candidates to try to break in.
● Watch how easy this is...
![Page 48: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/48.jpg)
Preventing Attacks
● To make it harder to crack a password, it's generally a good idea to● Pick a password that isn't known to be a very
common password (to prevent dictionary attacks), and
● Use a combination of lower case letters, UPPER CASE LETTERS, and numb3r5 (to increase the number of passwords that must be tried.)
● You've now seen exactly why this is!
![Page 49: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/49.jpg)
Why Brute-Forcing is Hard
![Page 50: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/50.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
![Page 51: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/51.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
![Page 52: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/52.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
""
![Page 53: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/53.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
"A" "B"
![Page 54: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/54.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
"AA" "AB" "BA" "BB"
![Page 55: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/55.jpg)
Memory Usage""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB"
"AAA""AAB""ABA""ABB""BAA""BAB""BBA""BBB"
![Page 56: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/56.jpg)
Memory Usage
● Our current brute-force attack requires us to have about 26n strings in memory when attacking a password of length n.
● When n gets large, this is an enormous amount of memory.
● On a computer with only 4GB or 8GB of memory, we might run out of memory trying to do a brute-force attack!
![Page 57: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/57.jpg)
A Recursive Approach
""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB""BBB"
![Page 58: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/58.jpg)
A Recursive Approach
""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB""BBB"
![Page 59: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/59.jpg)
A Recursive Approach
""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB""BBB"
![Page 60: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/60.jpg)
A Recursive Approach
""
"A" "B"
"AA" "AB" "BA" "BB"
"AAA" "AAB" "ABA" "ABB" "BAA" "BAB" "BBA" "BBB""BBB"
![Page 61: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/61.jpg)
A Recursive Approach
![Page 62: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/62.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
![Page 63: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/63.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
![Page 64: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/64.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
![Page 65: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/65.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
![Page 66: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/66.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
![Page 67: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/67.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
![Page 68: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/68.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
![Page 69: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/69.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
![Page 70: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/70.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
![Page 71: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/71.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
![Page 72: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/72.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
![Page 73: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/73.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
![Page 74: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/74.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
![Page 75: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/75.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
![Page 76: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/76.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
![Page 77: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/77.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
![Page 78: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/78.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
![Page 79: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/79.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
![Page 80: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/80.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAA" maxLengthsoFar
![Page 81: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/81.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAA" maxLengthsoFar
![Page 82: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/82.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAA" maxLengthsoFar
"AAA"
![Page 83: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/83.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAA" maxLengthsoFar
"AAA"
![Page 84: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/84.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAA" maxLengthsoFar
"AAA"
![Page 85: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/85.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
![Page 86: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/86.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
![Page 87: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/87.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
![Page 88: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/88.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAB" maxLengthsoFar
![Page 89: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/89.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAB" maxLengthsoFar
![Page 90: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/90.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAB" maxLengthsoFar
"AAB"
![Page 91: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/91.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAB" maxLengthsoFar
"AAB"
![Page 92: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/92.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AAB" maxLengthsoFar
"AAB"
![Page 93: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/93.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 94: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/94.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 95: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/95.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AA" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 96: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/96.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 97: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/97.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 98: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/98.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
![Page 99: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/99.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
![Page 100: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/100.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
![Page 101: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/101.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
![Page 102: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/102.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
![Page 103: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/103.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
![Page 104: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/104.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
![Page 105: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/105.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABA" maxLengthsoFar
![Page 106: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/106.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABA" maxLengthsoFar
![Page 107: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/107.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABA" maxLengthsoFar
"ABA"
![Page 108: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/108.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABA" maxLengthsoFar
"ABA"
![Page 109: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/109.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABA" maxLengthsoFar
"ABA"
![Page 110: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/110.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
![Page 111: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/111.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
![Page 112: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/112.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
![Page 113: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/113.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
![Page 114: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/114.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
![Page 115: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/115.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
"ABB"
![Page 116: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/116.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
"ABB"
![Page 117: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/117.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
"ABB"
![Page 118: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/118.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA" "ABB"
![Page 119: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/119.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA" "ABB"
![Page 120: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/120.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA" "ABB"
![Page 121: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/121.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 122: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/122.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 123: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/123.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 124: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/124.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 125: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/125.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 126: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/126.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
![Page 127: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/127.jpg)
A Recursive Approachvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
"AB"
"ABA" "ABB"
...
![Page 128: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/128.jpg)
Why This Matters
![Page 129: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/129.jpg)
Why This Mattersvoid generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"" maxLengthsoFar
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"A" maxLengthsoFar
""
"A"
"AA"
"AAA" "AAB"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(length, soFar + ch);
}
}
}3"AB" maxLengthsoFar
"AB"
"ABA"
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}
void generate(string soFar, int maxLength) {
doSomethingWith(soFar);
if (soFar.length() < maxLength) {
for (char ch = 'A'; ch <= 'B'; ch++) {
generate(soFar + ch, maxLength);
}
}
}3"ABB" maxLengthsoFar
"ABB"
![Page 130: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/130.jpg)
A Comparison
● Queue-based approach:
● Time: ≈26n+1
● Space: ≈26n+1
● This algorithm is called breadth-first search (or just BFS).
● Although less useful here, BFS has many applications; you'll see one in Assignment 2.
● Recursive approach:● Time: ≈26n+1
● Space: ≈n● This algorithm is called
depth-first search (or just DFS).
● Also quite useful; we'll see more applications later on.
![Page 131: web.stanford.eduweb.stanford.edu/class/archive/cs/cs106b/cs106b.1136/lectures/06/... · Disclaimer I am not trying to teach you how to hack into computer systems! This lecture (and](https://reader034.vdocuments.mx/reader034/viewer/2022042218/5ec4ad373b627b0e90351ead/html5/thumbnails/131.jpg)
Next Time
● Thinking Recursively● How can you best solve problems using
recursion?● What techniques are necessary to do so?● And what problems yield easily to a
recursive solution?