$oddnumber = (function(){
 $n = rand();
 if ($n === 0) {
  return $oddnumber();
 } else if ($n % 2 === 0) {
  return $n-1;
 } else {
  return $n;
 }
});

$n = rand(0, 1)とかにして0をよく出るようにして検証すると、
return $oddnumber();のところでエラーが出ます。
適当に$thisにしてみてもだめで、
use ($oddnumber)を加えてみてもだめでした。
クロージャーじゃなくておとなしく関数にして、関数コールにすれば問題ないのですが、
1度しか呼び出さない上に、createOddNumber()とか関数っぽい名前つけるのも嫌なので、
出来ればクロージャーでやりたいのですが、
return $oddnumber();の部分を再帰的に呼び出す方法はありますか?
だめなようなら1でも返そうとおもいます。