When I do a sudoku on paper, I fill the blank spaces (in pencil so I can erase it later) with all the possible values that could go in there and usually do that to all the blank squares in a row or column. Then I see which numbers only appear once in that row, column or big square and that HAS to be the right number, so I erase the possible numbers in that square and fill in the real number. I also remove that number from all the other possible numbers in the large square... Rinse, Lather, Repeat until it's done.
Maybe you can use this "caching" technique in your algorithm?
I tried to make my sudoku program do that but it always ran into trouble when it encountered something along the line of