In termini di velocità di esecuzione sono uguali. Il codice compilato / interpretato sta per fare un test se nodetype == 3. Se sì, esegue una dichiarazione di ritorno successiva. Se no, esegue l'altra dichiarazione di ritorno successiva. Entrambi i casi eseguiranno una dichiarazione di ritorno successiva.
In termini di utilizzo dello stack, sono uguali. In entrambi gli esempi mostrati, cade solo nella chiamata ricorsiva se non può corrispondere a nodetype == 3. È possibile scrivere male il codice in modo che avvengano chiamate ricorsive non necessarie. Ma questo non è il caso negli esempi mostrati. Quindi l'utilizzo della memoria è lo stesso.
Se null è un possibile valore per nodetype, sono sempre gli stessi. I due esempi verranno entrambi inseriti nella chiamata ricorsiva, sia se nodetype == 2 o nodetype == null. È possibile riscrivere gli esempi per verificare anche null e non cadere in ricorsione su valori null. Ma quella non era la domanda posta.
L'unica differenza potrebbe essere la leggibilità. Quale è più leggibile? Le affermazioni positive richiedono un passo mentale in meno (nodetype == 3) è un lavoro un po 'meno mentale di (nodetype! = 3). Ma marginalmente così.