But there is a sense in which recursion is more expressive than iteration, in the sense of being a flexible local abstraction: in a language with tail recursion, iterative loops can be directly encoded by means of recursive calls. And indeed this is how iteration is expressed in the Scheme language. Trying to encode recursion in terms of iteration cannot be done so directly.
Summing a list could be done by:
sum_iterative( list ) { sum = 0 for( element in list ) { sum += element } return sum }
or
sum_recursive( list ) { if( list.empty ) { return 0 } else { return list.head + sum_recursive( list.tail ) } }
So saying everything that can be done iteratively can't be done recursively is false, and also vice versa.