在 python 中,我們可以撰寫遞回函式來計算串列中的元素,如下所示:
def count(list):
if list == []:
return 0
return 1 count(list[1::])
但是如果有方法或其他東西可以在 Dart 中創建這行代碼 return 1 count(list[1::]) ?
我認為,我們可以使用 dart 集合來做這樣的事情,比如
var result = (1 a.sum);
return result;
現在我嘗試像這樣解決這個任務:
void main() {
List<int> n = [2, 6, 7]; //the arrays of element
int sumsReccur(List<int> n) {
if (n.length <= 0) {
return 0; //base case
}
}
var result = 1 sumsReccur(n.length);
return result;
}
uj5u.com熱心網友回復:
Dart 有惰性迭代器,這更有可能是你想要的。做法iterable[1::]是iterable.skip(1)。
它仍然非常低效,但你可以這樣做:
int count(Iterable values) {
if (values.isEmpty) return 0;
return 1 count(values.skip(1));
}
計算 的元素個數仍然需要 O(n^2) 時間values,但由于它是惰性的,它也不會復制元素,所以它只進行 O(n) 記憶體分配。
在實踐中,如果您關心性能,則永遠不要這樣做。最好在迭代器上進行迭代:
int count(Iterable values) {
int countIterator(Iterator iterator) {
if (iterator.moveNext()) return 1 countIterator(iterator);
return 0;
}
return countIterator(values.iterator);
}
同樣,這里的遞回是微不足道的,在迭代器上遞回通常是一個壞主意(最好有一個回圈,因為遞回堆疊大小有限制,而且你無法控制遞回的深度。)
在處理串列或可迭代物件時,訪問它們的首選方法是在回圈(for (var v in values) ...或for (var i = 0; i < list.length; i ) ... list[i] ...)中進行迭代,或者使用輔助函式(如values.forEach((value) { doSomething(value); });.
無論如何,您正在計算她的所有內容values.length,因此比遞回做得更好并不難。
uj5u.com熱心網友回復:
您可以使用以下sublist方法:
int sumsReccur(List<int> n) {
if (n.length <= 0) {
return 0; //base case
}
return subReccur(n.sublist(1));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/415945.html
標籤:
