2013-06-26 329 views
2

我在Mathematica中編程,我試圖避免多個for循環。多個嵌套for循環

設n是一個給定的整數,f是一個採用n元組的函數。給定綁定k,我正在尋找一種循環遍歷所有n元組的有效方法,其中每個條目的範圍從-k到k。 (我會將n元組插入到f)

我試過Mathematica的函數元組[範圍[-k,k],n],除了我經常想要n約爲8,10或15 ,並且即使k小到2(我想k至少是4或5),內存將耗盡試圖保存(2k + 1)^ n個元組。

我最初使用n for循環,它確實工作。現在我想改變n,我不能保持手動進入併爲每個n插入代碼。

感謝您的幫助和建議!

+0

一般來說,如果你需要一個變量嵌套循環的深度,你應該看看遞歸。 – DevNull

回答

0

這是編程建立嵌套循環的方式:

ftup[tup_] := Print[tup] 
n = 2 
k = 1 
Do @@ Join[{Unevaluated[ftup[Array[ a, n]]]}, 
     Table[ { a[i], -k, k } , {i, n }]] 

這說明我們正在複製內置的元組:

ftup[tup_] := Sow[tup]; 
n = 6; 
k = 3; 
[email protected]@Reap[ Do @@ 
Join[{Unevaluated[ftup[Array[ a, n]]]},Table[ { a[i], -k, k } , {i, n }]] ] 
    == Tuples[ Range[-k, k] , {n}] 
0

我想你只需要一個循環。這裏有一個打印所有必要的元組爲您提供:

With[{k = 2, n = 3}, Do[Print[IntegerDigits[i, 2 k + 1, n] - k], {i, 0, (2 k + 1)^n - 1}]];