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

我试图返回最小值的索引。上面的代码返回最小值的VALUE,但是我无法返回索引,任何人都可以帮忙吗?此外,我只允许将2个参数传递给函数,数组和数组的大小。回归min索引递归

+1

这是什么语言? C? C++? – Paul

+0

如果函数使用C或C++(或基于C或C++的任何语言),那么您无法真正返回多个值。您可以将其作为* output *参数,或者使用* pair *或* tuple *或* structure *或甚至一个*数组* *(在某些语言中)作为返回值“返回”。具体怎么做取决于你对我们一无所知的语言。 –

+0

或者等待,你是否想将函数改为* only *返回索引,而不是值? –

回答

0
下面

见代码(修改为只使用2个参数):

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

谢谢@rbaghbanli,这绝对有帮助。有没有办法做到这一点只传递2个参数到函数,数组和数组的大小? – JayC

+0

当然,修改为仅使用2个参数。 –

+0

这样做了!谢谢SOOOO @rbaghbanli – JayC

1

像这样的东西可能会工作:

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); 
} 

你会先f(a, 0, size-1)调用它。

这么说,我不知道为什么你要当它似乎更容易做到在一个循环做到这一点递归:

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; 
}