2016-04-25 21 views
-2

私はPythonでシルベスターシーケンスをコーディングする必要があります。配列のための式は符号化シルベスターシーケンス

$$s_n = 1 + \prod_ { 
 
    i = 0 
 
}^{ 
 
    n - 1 
 
} 
 
s_i$$

$s_0 = 2$として定義されます。

しかし、このコードをPythonで書くのは面倒です。誰もそれを行う方法の提案を持っていますか? Pythonで

+1

何が問題なのでしょうか? –

答えて

2

A単純な再帰ソリューション:

def sylvelster(n): 
    product = 1 
    for k in range(n): 
     product *= sylvelster(k) 
    return product + 1 

それとも、見て、洗練された、常に人気のある1つのライナーのために行くことができる:(明示的なスタックと)

from functools import reduce 
from operator import mul 

def sylvelster(n): 
    return 1 + reduce(mul, map(sylvelster, range(n)), 1) 

または反復解法の代わりに、再帰的なもの(暗黙的なスタックを持つもの):

from functools import reduce 
from operator import mul 

def sylvelster(n): 
    products = [2] 
    for k in range(n): 
     products.append(1 + reduce(mul, products, 1)) 
    return products[-1]