一番簡単なのはスタックサイズを増やすことです。
スタックサイズの設定は開発環境によりますので、ググってください。
あるいは、スタックはスレッドごとに割り当てられますので、
w-xの範囲はAスレッドでする
x-yの範囲はBスレッドでする
というように分割する手もありますが実装が面倒でしょうね。
この関数の呼び元で、オーバーフローしない範囲での実行を繰り返すように
するのが一番妥当でしょうか。
@範囲を引数にする
void nuri(int type, int posX, int posY, int width, int height)
A呼び元で小さい範囲で呼び出す
do
{
// posX, posY, width, heightをオーバーフローしない範囲に絞る
nuri(type, posX, posY, width, height);
// 次の塗り範囲に値を更新する
} while(塗り残しがある)