Ciao,
Per quanto riguarda i metodi ricorsivi non sò indicarti nessun sito in cui se ne parla. Per quanto rigurda la soluzione al tuo esercizio potrebbe essere questa:
codice:
package it.underline.contribuzioni.entity.dao;

public class StringUtils
{
	private String myString;

	public StringUtils(String string)
	{
		myString = string;
	}

	public int indexOf(String aString)
	{
		if (aString.length() <= this.myString.length())
		{
			return this.indexOf(0, aString.length(),aString);
		}
		else
		{
			return -1;
		}
	}

	private int indexOf(int startIndex,int toIndex, String aString)
	{
		if(toIndex > this.myString.length())
		{
			return -1;
		}
		String subString = myString.substring(startIndex,toIndex);
		if (aString.equals(subString))
		{
			return startIndex;
		}
		else
		{
			return indexOf(++startIndex,++toIndex,aString);
		}
	}
	public static void main(String[] args)
	{
		System.out.println(new StringUtils("Mississippi!").indexOf("pippo"));
	}
}