Surprised to see these introductory courses haven't been mentioned yet.
These courses [0] [1] are on EdX and are taught by UBC Professor Gregor Kiczales. The explanations are so lucid it made recursion click for me. You can audit these courses without paying a single dime. They are based on the book How to Design Programs [2] which has much more stuff than the courses.This book is used in UBC, UWaterloo, NorthEastern and many other places.
Along the same lines there is another book for beginners called A Data-Centric Introduction to Computing [3]. It is used in Brown for their introductory courses.
These courses [0] [1] are on EdX and are taught by UBC Professor Gregor Kiczales. The explanations are so lucid it made recursion click for me. You can audit these courses without paying a single dime. They are based on the book How to Design Programs [2] which has much more stuff than the courses.This book is used in UBC, UWaterloo, NorthEastern and many other places.
Along the same lines there is another book for beginners called A Data-Centric Introduction to Computing [3]. It is used in Brown for their introductory courses.
[0] https://www.edx.org/course/how-to-code-simple-data
[1] https://www.edx.org/course/how-to-code-complex-data
[2] https://htdp.org/
[3] https://dcic-world.org/