Tôi làm đệ quy để tìm một giá trị dài trong Danh sách có nhiều trẻ em cũng có thể có con.Dừng đệ quy hoàn toàn khi trả lại một cái gì đó
phương pháp sau đây:
public TaxonomyData getTaxonomyData(long taxId, List<TaxonomyData> TaxonomyTree, TaxonomyData output)
{
//find taxid in the taxonomy tree list and return the taxonomydata
foreach (TaxonomyData td in TaxonomyTree)
{
if (td.TaxonomyId == taxId)
{
output = td;
//return td; => when doing a return here means I already found a match so it is not necessary to do all the recursion.
}
else if (td.Taxonomy.Length > 0)
{
getTaxonomyData(taxId, td.Taxonomy.ToList(), output);
}
}
return output;
}
Có thể khi tôi làm return td;
(xem hàng nhận xét) mà toàn bộ đệ quy của tôi dừng lại?
Cảm ơn
Đừng lo lắng, nó sẽ xảy ra. Việc đệ quy sẽ dừng lại ở đó. –
Bạn có chắc chắn đang nói về việc dừng các cuộc gọi đệ quy tới getTaxonomyData không? Nếu bạn đang cố gắng tránh lặp đi lặp lại một cách vô tình với việc rao giảng vì bạn đã có giá trị bạn cần thì những gì bạn phải làm là thêm "break"; ngay sau "output = td;" chỉ dẫn. Và tôi nghĩ trong trường hợp này một thời gian sẽ là giải pháp tốt hơn ... –
@Jani: Không, đệ quy * sẽ không * dừng nếu cuộc gọi sâu chỉ trả về - vì đệ quy sẽ từ mệnh đề 'else', bỏ qua giá trị trả về và chỉ tiếp tục với phần tử tiếp theo của 'TaxonomyTree'. –