9 Answers
9

Other than the obvious difference with the pipe, both versions can be seen as equal. The implementation (ls.c vs. find.c taken from busybox) looks quite the same when searching for files. You can also shorten the first one:

Find is definitely the best tool for this job.
The output of ls -R will be difficult to parse (the file names are interleaved with the directory names). Besides with ls you will have hard time dealing with names with spaces, whilst find . -name '*.jpeg' -print0 will generate a list separated by null-characters. xargs, grep and others have option to read this kind of input. This means all weird names are preserved.

There is also the locate *.jpeg option which makes use of a database. However, this database is only updated at regular intervals (generally from a cron job) so some file might not have been indexed yet at the time you're invoking the locate command hence producing a less accurate result. You can force the creation or update of this database by invoking the updatedb command.

About find vs ls performance, ls will sort the output which takes time while you don't necessarily need it. Also, ls will output a lot of information which needs to be filtered by grep afterwards.

Depends on what you want as a result. ls -R won't tell you which directory it found the file in, while find will.

Also, ls -R generates more output, which is subsequently filtered, while find searches specifically for what you wanted. Without having done measurements, I would guess that find is generally more efficient.