3

私は奇妙な現象に出くわしました:

「カタロニア語の数字」を計算するコードを書きましたが、これは動作しますが、今はメモ化辞書 (ディカタランと呼ばれます) を使用して実行時間を改善しようとしています:

dicatalan = {} 
def catalan(n):
    if n == 0:
        return 1
    else: 
        res = 0
        if n not in dicatalan:
            for i in range(n):
                res += catalan(i) * catalan(n - i - 1)
            dicatalan[n] = res
            print ("dicatalan is", dicatalan)
    return dicatalan[n]

これがキャッチです-Eclipse-Pydev-n=1コードは途中で実行され、予想どおりに出力されます: "dicatalan is 1:1" 不思議なことに停止する前に、しかし IDLE では同じコードが "dicatalan is 0:1" を出力します。

いずれにせよ、後で dicatalan を印刷しようとすると、{} を受け取りました。

それはどうしてですか?コードで何が起こりますか?デバッガーを実行しても無駄であることが判明しました。

口述を機能させるためのアイデアはありますか?

4

1 に答える 1

1

私にとっても問題なく動作します。コードを少し単純化する自由を取りました:

def catalan(n, memo={0: 1}):
  if n not in memo:
    memo[n] = sum((catalan(i) * catalan(n - i - 1)) for i in range(n))
  return memo[n]
于 2012-12-08T14:44:40.210 に答える