- ベストアンサー
再帰的関数 2進数の1の個数
f(x)=if x=0 then 0 else if divisible(x,2) then f(x/2) else f(x/2)+1 divisibleは2で割り切れる、x/2は整除です。2で割ったときの整数値 この式が、xを2進数であらわしたときの1の数を表す、というのですが、 式に数値を入れてみても、1の数にならず困っています。 ご指導いただけましたら幸いです。 よろしくお願い申し上げます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 No.1の方への補足を拝見しますと、 f(x/2)+1ではなく(x/2)+1という計算をしてしまっているようです。 f(7)=3+1ではなく、f(7)=f(3)+1と計算すべきです。 f(7)=f(3)+1 ↓ f(3)=f(1)+1 ↓ ↓ f(1)=f(0)+1 ↓ ↓ ↓ f(0)=0 ↓ ↓ f(1)=0+1=1 ↓ f(3)=1+1=2 f(7)=2+1=3
その他の回答 (1)
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.1
>式に数値を入れてみても、1の数にならず困っています。 どんな数値を入れたときにお困りですか?
質問者
補足
ご回答ありがとうございます。 例えば、xに7を入れますと2で割りきれませんので、3+1=4になります。 しかし、7の2進数は、111ですから3です。 4にしてしまう私のミスを教えていただけますでしょうか? よろしくお願い申し上げます。
お礼
ご回答ありがとうございます。 とても分かりやすく理解できました。 問題のf( )= と =が付けられるのも不思議です。 情報の世界は不思議なことが多いですね。