Con respecto a la recursividad, como dice mariosaul, es probable que pueda "traducirse" tu algoritmo a uno iterativo.
Respecto al Reset hay dos formas:
a) necesitarás modificar el hard, puesto que consiste en poner un transistor en la patilla reset gobernado por un pin de salida, como anuciaba roc364.
b) utilizando el WatchDog. Es un dispositivo que resetea el pic si no se le da un refresco continuamente. Por tanto, podrías poner ese refresco en el bucle principal de tu programa, y eliminarlo cuando quieras resetear.