I came across something in my copy of "Ada Plus Data Structures: An Object Oriented Approach" (1996) that deserves a slight necro-post. In the front cover I've written a tonne of exam notes including:
- Self recursion
- Mutually recursive
- Recursive chain
However this wasn't mentioned in the 30 odd pages on the subject (really good book btw). I dug through my lectures notes and definitely wrote them down while going over Sets and Lists but it wasn't much.
GregBrannon makes a good counter case and I can't find anything more authoritative that my own 12 year old lecture notes. This simply comes down to my own opinion but I still think that .last() should be treated as recursive. Given OP's code fragment and the spirit of the question I am assuming that nothing is being overloaded and 'root' is a type of this class. .getRightMostData() has a base call, a call on itself and a recursive memory profile and by my previous assumption .last() does as well. The designers of this class would have considered what would happen if 'root.right' points to itself or forms a daisy chain and chosen recursion as the most elegant solution.
I think Norm's answer is correct in the broadest and most practical sense. I think my answer is correct but from a specific, design orientated perspective. It's the less correct answer because it's rare to consider these kinds of data structure implementations in modern languages like Java.