我正在寫我的語言學博士論文,我希望使用遞回編程方法作為一個平行的可視化的程序。遞回在這里很重要,因為這個概念依賴于編程和語言學中的概念遞回的比較。 讓我們假設,我們希望寫一個方法來創建檔案夾和其中的子檔案夾(以及子檔案夾......)。為了簡單起見,我們可以把檔案夾的名字處理成整數,而不需要創建檔案夾本身。 我希望用以下規則來實作這個方法
我試了很多次,主要是每次都有一些步驟丟失或不作業。 版本1:
numbers在這里是一個類(list)的靜態變數,但是如果有一個解決方案,我不需要這個,我會很高興。
public static void countFolders(int max, int currentAmount, int originalAmount, int index) {
int[] evenMultipliers = new int[]{2, 3, 4}。
if (originalAmount >=max){
return;
}
if (currentAmount < max){
numbers.add(currentAmount)。
}
if (index >= evenMultipliers.length) {
countFolders(max, originalAmount, originalAmount, 0) 。
}else if (evenMultipliers[index] * currentAmount > max) {
countFolders(max, originalAmount 1, originalAmount 1, 0) 。
}else{
countFolders(max, currentAmount * evenMultipliers[index], originalAmount, index 1) 。
}
}
我確實認為在某處我錯過了遞回的一些重要概念。我并不完全確定如何跟蹤上一級的檔案夾名稱,但我用不同的方法(例如在 foreach 回圈中的遞回)嘗試了很多次,但仍然不知道如何正確完成這個任務。
--已編輯--
提前感謝您的幫助!
uj5u.com熱心網友回復:
這不是遞回,但根據我對演算法的理解,我相信它是可行的。
- 從1到max-1的檔案夾被迭代 將第一個檔案夾添加到串列中。
- 現在處理該檔案夾的子檔案夾 。
- 將這些添加到串列中
- 重復操作 。
請注意,在某些情況下,順序可能與預期不同。我建議你根據其他情況進行驗證。
for (int max = 3; max < 10; max ) {
List<Integer> nums = new ArrayList<> ()。
for (int folder = 1; folder < max; folder ) {
nums.add(folder); //添加第一個檔案夾。
nums.addAll(add(folder, max)); //增加第一個檔案夾的子檔案夾。
}
System.out.printf("max = - : %s%n"/span>, max, nums)。
}
prints
max = 3 : [1, 2, 2]
max = 4 : [1, 2, 3, 2, 3]
max = 5 : [1, 2, 3, 4。4, 2, 4, 3, 4]
max = 6 : [1, 2, 3, 4, 4。2, 4, 3, 4, 5]
max = 7 : [1, 2, 3, 4, 4, 6, 2, 4, 6, 3, 6, 4, 5, 6]
max = 8 : [ 1, 2, 3, 4, 4, 6, 2, 4, 6, 3, 6, 4, 5, 6, 7]
max = 9 : [1, 2, 3, 4, 4。6, 8, 6, 2, 4, 6, 8, 8, 3, 6, 4, 8, 5, 6, 7, 8]
該方法的作業原理如下
static int[] multipliers = { 2, 3, 4};
public static List<Integer> add(int currentFolder, int max) {
List<Integer> folder = new ArrayList<> ()。
int folderIdx = 0;
while(true) {
for (int mult : multipliers) {
int val = currentFolder * mult。
if (val >= max) {
//由于檔案夾是按順序排列的,如果
//這個檔案夾太大,那么后面的檔案夾也會太大。
return檔案夾。
}
folder.add(val)。
}
currentFolder = folder.get(folderIdx )。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/319297.html
標籤:

