私は、nのセットから長さkのすべての組み合わせを生成する再帰関数を持っています。典型的には「nCk」(「nはkを選択する」)と呼ばれる。私はかなり大きな値(56C22)でそれを緩くして、2,142,582,442,263,900の結果を生み出すことを望みます。実装上の制約(私はVBScriptを使用しなければならず、私が仕事中よりも長い間コンピュータにログインしたままにすることができません)では、完了まで一度に実行することはできません。そのように、私は定期的に関数の現在の状態を保存し、後で再開したいと思います...しかし、私はそうする方法を見つけることができないようです。再帰は、論理的にこれを考える能力を乱している。保存された状態からの再帰関数の再開
私はここで提案された解決策を熟読しており、そうでなければ "再帰的機能の再開"などを無駄に検索しています。私は適切なトラックに私を得るためにいくつかのポインタ(プログラミング言語ではない)を感謝します。
実際のアルゴリズムを含む実際のアルゴリズム(擬似コードは問題ありません)は、実際のコードを含まない長時間の説明よりも優先されます。実際にコードを作成したいのであれば、C、C++、Pascal、VB、JavaScript、VBScriptに精通しています(現時点でVBScriptを使って作業しています)。ここで
は私の再帰関数である:FYI
function nCk(aSet, iSetIndex, aSubset, iSubsetIndex)
'Found result
if (iSubsetIndex > ubound(aSubset)) then
log "output.txt", join(aSubset), 1, false
exit function
end if
'No more characters available
if (iSetIndex >= ubound(aSet) + 1) then
exit function
end if
'With aSet[iSetIndex]
aSubset(iSubsetIndex) = aSet(iSetIndex)
nCk aSet, iSetIndex + 1, aSubset, iSubsetIndex + 1
'Without
nCk aSet, iSetIndex + 1, aSubset, iSubsetIndex
end function 'nCk
:私は50歳です。これは宿題ではありません。
生成する出力量には注意が必要です。実際にすべての可能性についてラインを出力しているのであれば、標準的なハードドライブのスピードですべてのディスクをディスクに書き込むだけで、数多くのデータをディスクに保存する余裕がない。本当に長い実行プロセスが必要な場合は、AWSボックスを取得して実行する方が良いかもしれません。 – MrCodeBlok
出力は書き込み前に解析され、無効な結果(ほとんどの場合)は破棄されます。 – Brian
私はあなたを正しく理解しましたか?大きな値の二項係数を計算する関数を書いて、途中で作業を再開したことを確認したいのですか? –