One way to learn some of using recursion while using Racket (or any other Scheme) is to:
* avoid the iteration constructs that Racket added to Scheme,
* avoid mutating operations, such as `set!` and those that operate on mutable data types,
* embrace named-`let` for iteration/recursion (using `let` with a name, like `(let loop-for-foo (` rather than `(let (`, which effectively makes it like an embedded function that can be called from within its own definition), and
* embrace immutable data for collections, like immutable pairs and immutable hashes.
You can do that for real-world development, or for interview-oriented Leetcode-type exercises. Whichever motivates one more; with the above suggestions, both will present many opportunities to practice recursion this way, without exercises that are selected or contrived to need recursion.
* avoid the iteration constructs that Racket added to Scheme,
* avoid mutating operations, such as `set!` and those that operate on mutable data types,
* embrace named-`let` for iteration/recursion (using `let` with a name, like `(let loop-for-foo (` rather than `(let (`, which effectively makes it like an embedded function that can be called from within its own definition), and
* embrace immutable data for collections, like immutable pairs and immutable hashes.
You can do that for real-world development, or for interview-oriented Leetcode-type exercises. Whichever motivates one more; with the above suggestions, both will present many opportunities to practice recursion this way, without exercises that are selected or contrived to need recursion.