Po pierwsze niepoprawny sposób wczytywania danych - spójrz co się dzieje, jeżeli wczytywana wartość przekracza zakres typu wczytywanej zmiennej - http://ideone.com/7ARgMk
po drugie nieskończone działanie, jeżeli nowy kolor taki sam jak stary i jest sąsiad tego koloru (to już zauważył rafal06)
po trzecie i tak nie będzie po poprawieniu 2 poprzednich problemów w tej postaci działało - wywołujesz funkcję rekurencyjnie, w pesymistycznym przypadku 250 tysięcy razy (500 * 500) - to nie ma prawa zmieścić się na stosie, jego default to 8 MB
Jak to zmienić - to też proste - poczytać, pouczyć się, pomyśleć - a na pewno sam znajdziesz rozwiązanie 