Programming has three aspects:
The first two aspects are finite and can be learned the first time in a few months. Subsequent langauges can be learned in weeks. Although there an unbounded number of possible data structures there are only a small finite number of data structure elements that are used recursively to define any data structure, no matter how complex or large.
The third aspect, algorithms, is unbounded as is mathematics, and both mathematics and algorithms are a mutually reinforcing life time study.
Recursion is essential to mathematics and modern programming and the theory of computing in general. Recursion is fundmentally elegant. Recursion is where the implementation (or definition) of a function calls other functions, including itself either directly or indirectly. Indirect recursion level one is where a function calls another function which in turn calls the first function. Indirect recursion can be two levels or more.
For some algorithms recursion is the only actual or practical means of implementation, for example when manipulating tree data structures.
Iteration is essential to mathematics and modern programming and the theory of computing in general. Iteration is where a block of statements are executed a number of times in a loop where a loop variable steps over a range of values. A loop can be nested within another loop.
Iteration and recursion can be combined in any way that is needed.