Why do we want to use assert, as in why would we want to something that could cause an error?
'assert' is useful in testing code --- it only gives an error message when the test fails, so it's an easy way to make sure that the entire program works as we expect: if all the tests pass, then we'll get no error messages and the program will run. But if there are any failed tests, we get an error. This prevents us from having cases where the program has an error, but we didn't include a print statement to print a useful debugging message.
What things can recursion be used for besides searching and doing mathematical operations?
Pretty much everything. Once you have a bit more practice with recursion, you can begin to see applications of recursion everywhere!
One in particular that you might be interested to hear about is sorting: the fastest sorting algorithms possible all use recursion. We also saw a quick example of drawing a fractal using recursion.