誤解多くてごめん。自分がしたい事は

�@
if(rnd2<psi[x]/psi[N/2]){
return x;
}else....
もしそうじゃなけりゃ、�@に戻る。

つまり、if(rnd2<psi[x]/psi[N/2])の条件が出るまで
関数calc_n内でx,psi[x],rnd2を計算し続ける、という事です。