-PR-
解決済み

再帰を使用した関数にしたい

  • 暇なときにでも
  • 質問No.9320313
  • 閲覧数258
  • ありがとう数1
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (1/1)

以下は n を2進数としたときに、連続する 1bit の最大値を求める関数です。
最下位ビットチェックして右シフトでカウントしています。

これを再帰を使って書き直した場合、どんな感じになるでしょうか?
宜しければ、サンプルコードを教えてください。

#include <algorithm>
using namespace std;

int getBitMaxWidth(long long n)
{
 int count = 0;
 int max_count = 0;
 do {
  if (n & 1LL) { //最下位 bit チェック
   count++;
   max_count = max(count, max_count);
  } else {
   count = 0;
  }
 } while ( n>>=1 );

 return max_count;
}
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル7

ベストアンサー率 88% (8/9)

http://stackoverflow.com/a/12617595
の回答を再帰化すると、
https://pastebin.com/KcSFAeSp
になるかなと思います。
お礼コメント
marudora

お礼率 100% (1/1)

サンプルコードありがとうございます。該当部分を抜き出してみました。

static uint8_t count_consecutive_ones_recursive_sub(uint64_t in, uint8_t acc)
{
 if (in == 0) return acc;
 return count_consecutive_ones_recursive_sub((in & (in << 1)), acc + 1);
}

再帰だと簡潔に書けますね。自分を呼び出した時、計算結果を引数で伝えていく感じでしょうか。
参考になりました。
投稿日時 - 2017-04-23 14:55:09
このQ&Aのテーマ
このQ&Aで解決しましたか?
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ