Originariamente inviato da ybla82
....
- la funzione verifica se il primo elemento della lista è quello cercato.
- Se si ,restituisce la posizione, altrimenti tolglie il primo elemento dalla lista e chiama se stessa.

- Chiamando se stessa, viene fatta la stessa cosa, per cui viene verificato di nuovo se il primo elemento della lista è uguale a quello cercato ( in questo caso stiamo confrontando il secondo elemento della lista originale).

- Questo passaggio viene ripetuto fino a quando non è valida la condizione x == Fist(L). In questo caso si restituisce 1.

- Il valore restituito entrerà in "else y +1". Questo passaggio verrà eseguito tante volte quante sono le chiamate ricorsive effettuate. In questo modo otterrai la posizione dell'elemento cercato.

.....
E' proprio la parte in grassetto che non ho capito.
Supponendo una lista {1-2-3-4-5}, in cui voglio cercare 3 ad esempio:
prendo il primo elemento della lista, lo confronto con 3 non è uguale. quindi tolgo il primo elemento della lista e passo al successivo (che è 2); di nuovo, 2 != 3 quindi scarto anche 2.
Quando però arrivo a 3=3 mi trovo nella condizione di x==First(L), quindi ho un return 1.
Bene, quel return 1 non mi fa finire l'esecuzione del programma resituendomi 1?
E' questo passaggio che non mi è chiaro.