we would like to learn how to solve complex recursion problems, sorting algorithm problems, and so on.
The only way is to read and do. Computer programming has unlimited free learning resources on the internet for any skill level. There is no way that I know of to practise programming other than just doing it. Think of a problem, solve it recursively. Find something to sort, and sort it. Spend hours working something out.
Doing old ECOO (and other contest) problems is almost certainly the best way to practise. Contest problems are always very similar- They all read input from a text file. There is almost always a map traversal problem where the map is a grid of ascii characters. Sorting and permutation problems are common.
Keep doing what you're doing. See if your teacher will give you a crash course in recursion. Read stuff. Practise.