Yinelemeli yineleme yöntemlerini bulmak için ana teoremize başvurmak isteyebilirsiniz. İşte wikipedia makalesi: http://en.wikipedia.org/wiki/Master_theorem
Ağaç gibi özyinelemeli bir sorun düşünmek istersiniz. Ardından, ağacın her seviyesini ve gerekli iş miktarını dikkate alın. Problemler genel olarak 3 kategoriye ayrılır, kök ağır (ilk iterasyon >> ağacın geri kalanı), dengeli (her seviyenin eşit miktarda işi vardır), yaprak ağır (son iterasyon >> ağacın geri kalanı). Örnek olarak
alınması birleştirme sıralaması:
define mergeSort(list toSort):
if(length of toSort <= 1):
return toSort
list left = toSort from [0, length of toSort/2)
list right = toSort from [length of toSort/2, length of toSort)
merge(mergeSort(left), mergeSort(right))
Sen sırayla mergesort her çağrı 1/2 orijinal uzunluğunun 2 daha mergeSorts çağırır görüyoruz. Birleştirme prosedürünün, birleştirilen değerlerin sayısına orantılı zaman alacağını biliyoruz. Nüksetme ilişkisi daha sonra T (n) = 2 * T (n/2) + O (n) şeklindedir. İki, 2 çağrıdan gelir ve n/2, her bir çağrıda sadece elemanların yarısına sahip olur. Bununla birlikte, her seviyede, birleştirilmesi gereken aynı sayıda eleman vardır, böylece her seviyede sabit çalışma, O (n) 'dir.
İşin eşit olarak dağıldığını biliyoruz (O (n) her bir derinlik) ve ağaç log_2 (n) derinliğindedir, bu nedenle özyinelemenin büyük O değeri O (n * log (n)) olur.
Bu gerçekten özyineleme ile ilgili çok şey ve büyük O notasyonu ile ilgili her şey vardır. Yinelemeli olarak yazabilirseniz, yinelemeli olarak – MStodd
@ MStodd yazabilirsiniz. Yinelenen bir ikili ağacı geçmeyi deneyin. – Drise
@Drise Yığına ihtiyacınız var, ama mümkün. Özyineleme, yığının çağrı yığınının içinde gizlenmesini sağlar. –