質問に書いてあるのに無理やりはめ込んでみました。まぁ、普通こんなことはしないと思いますが。
main関数は自分で適宜修正して下さい。処理の意味に対して「整数%dの1bitの総数は%dです。」という言葉は不適切だと思います...
C
1int parity(int n) {
2 if (n % 2 == 0) {
3 if (n != 0) {
4 n = parity(n / 2);
5 } else {
6 n = 2;
7 }
8 } else {
9 n = (3 * ( n % 2 ) ) ^ parity( n / 2 ) ;
10 }
11 return n;
12}
Xor'^'がわかりにくければ、n = (3 * ( n % 2 ) ) ^ parity( n / 2 )
はこの場合は
if( parity( n / 2 ) == 2){
n = 1;
} else {
n = 2;
}
とかでも動きは同じですのでよしなに。
n%2で分岐しているのがなんとも扱いにくいですね。再帰の使い所でもないと思いますが、再帰でやるならせめてこんな感じでしょうか。
C
1int parity(int n){
2 int ret; //変数を理由もなく再利用しない。戻り値用変数を設ける
3 if(n != 0){
4 ret = (3 * ( n % 2 ) ) ^ parity( n / 2 ) ;
5 }else{
6 ret = 2;
7 }
8 return ret;
9}