• ベストアンサー

再帰的関数 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の数にならず困っています。 ご指導いただけましたら幸いです。 よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.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

matsumichi
質問者

お礼

ご回答ありがとうございます。 とても分かりやすく理解できました。 問題のf( )= と =が付けられるのも不思議です。 情報の世界は不思議なことが多いですね。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>式に数値を入れてみても、1の数にならず困っています。 どんな数値を入れたときにお困りですか?

matsumichi
質問者

補足

ご回答ありがとうございます。 例えば、xに7を入れますと2で割りきれませんので、3+1=4になります。 しかし、7の2進数は、111ですから3です。 4にしてしまう私のミスを教えていただけますでしょうか? よろしくお願い申し上げます。

関連するQ&A