1

ランダム検索機能があります。乱数を選択し、指定されたコンテナでその番号を検索します。十分な試行の後、再帰呼び出しを終了できるようにしたいと考えています。これまでのところ、これを行うには、カウンターとして使用する 3 番目の引数を渡す必要がありました。関数内にカウンターを作成するにはどうすればよいですか?

#include <iostream>
#include "print.h"
#include "random.h"
std::vector<int>::size_type random_search(std::vector<int> A, int x, int cnt)
{
    int i = random(0, A.size() - 1);
    if(A[i] == x)
        return i;
    else if(cnt > 500) {
        std::cout << "NOT FOUND" << std::endl;
        return -1;
    }
    else {
        cnt++;
        return random_search(A, x, cnt);
    }
}
int main()
{
    std::vector<int> B;
    fill(B, 40);
    print(B);
    int index = random_search(B, 80, 0);
    std::cout << "position = " << index << std::endl;
    return 0;
}

関数の先頭で変数を宣言すると、再帰ごとにこの宣言が上書きされ、再度初期化されます。

まだ作成されていない変数が存在するかどうかを確認する方法はありますか? たとえば、次のようなコードを入れて、3 番目のパラメーターを持たないことを考えていました。

if(cnt)
    cnt++;
else
    int cnt = 0;
4

1 に答える 1

2

cnt引数のデフォルト値を設定できます。

std::vector<int>::size_type random_search(std::vector<int> A, int x, int cnt = 0)
{
  // ...
}

これで、 に 0 を渡さずにメインから呼び出すことができますcnt:

int index = random_search(B, 80);
于 2013-09-19T16:07:42.700 に答える