2016-03-31 27 views
0
int f(int a[], int size) { 
    if (size == 1) 
     return arr[0]; 
    size--; 
    return f((arr + (arr[0] > a[size])), size); 
} 

Minimum endeksini döndürmeye çalışıyorum. Yukarıdaki kod, minimum değerin VALUE değerini döndürür, ancak dizini döndürmede sorun yaşıyorum, herkes yardımcı olabilir mi? Ayrıca, yalnızca işleve, diziye ve dizinin boyutuna 2 parametreyi geçebilirim. BöyleDönüş min Dizin Yinelemeli olarak

+1

Bu hangi bir dildir? C? C++? – Paul

+0

Eğer işlev C veya C++ (veya C veya C++ tabanlı herhangi bir dilde) ise, birden fazla değer döndüremezsiniz. Bir * çıktı * parametresi olarak "döndürür" veya bir * çift * veya * tuple * veya * yapı * veya hatta bir * dizi * (bazı dillerde) dönüş değeri olarak kullanabilirsiniz. Tam olarak nasıl yapılacağı, hakkında hiçbir şey bilmediğimiz dile bağlı. –

+0

Veya bekleyin, işlevi * sadece * indeksi döndürmek için değil, değeri değiştirmek ister misiniz? –

cevap

0
aşağıda

bakınız kodu (2 parametre yalnızca kullanmak üzere modifiye):

int f(int a[], int size) { 
    if (size <= 1) 
     return 0; 
    int i = f(a, --size); 
    return a[size] < a[i] ? size : i; 
} 
+0

Teşekkürler @rbaghbanli, bu kesinlikle yardımcı olur. Bunu, işlevin, dizinin ve dizinin boyutuna yalnızca 2 parametreyi geçerek yapmanın bir yolu var mı? – JayC

+0

Elbette, sadece 2 parametreyi kullanacak şekilde değiştirildi. –

+0

Bu yaptı! Teşekkür ederim SOOOO çok @rbaghbanli – JayC

1

şey muhtemelen çalışacaktır:

size_t f(int a[], size_t low_index, size_t high_index) { 
    if (low_index == high_index) { 
     return low_index; 
    } 

    if (arr[low_index] > arr[high_index]) { 
     low_index++; 
    } else { 
     high_index--; 
    } 

    return f(a, low_index, high_index); 
} 

Sen f(a, 0, size-1) ile çağırır.

bunu bir for döngüsü içinde bunu yapmak için daha kolay görünüyor zaman yinelemeli yapmak istiyor neden emin değilim, dedi ki:

size_t f(int a[], size_t size) { 
    size_t min_index = 0; 
    int min_value = a[0]; 
    for (size_t i = 1; i < size; ++i) { 
     if (a[i] < min_value) { 
      min_value = a[i]; 
      min_index = i; 
     } 
    } 

    return min_index; 
} 
İlgili konular