こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

以下は 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;
}

投稿日時 - 2017-04-22 00:32:14

QNo.9320313

暇なときに回答ください

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

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

投稿日時 - 2017-04-22 21:27:16

お礼

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

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は役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)