Sorry, but it's not natural for me
at all. In fact, when I learned programming, that was one of the harder things to wrap my head around.
In English, when you say while A, B" it means "as long as condition A is fulfilled, condition B is also fulfilled". Like "while the window is open, the room is getting colder".
But then in programming, that's not how it works. "while the stream is not closed..." what? A variable called symbols is being assigned. That's an action - so how often does it happen? Once or multiple times? Can the code after the while run in parallel or only sequential? And don't even get me started with forgetting to close the stream.
Etc. etc.
Intuitively it would be: "1.) open a stream. 2.) If there is nothing more to read, close the stream, otherwise read one symbol and add it to the list of symbols. Repeat 3.) repeat step 2".
So for me at least, the recursive version is much more intuitive. it's how I think about it and how I would think about it if it were a real-world problem too.