2013-08-24 2 views
-1
`/* finding the minimum number of a array */ 
#include<stdio.h> 

int minimum(int n, int a[n], int x); 

int main(void) 
{ 

    int a[5] = { 5, 4, 3, 4, 5 }; 
    printf("%d \n", minimum(4, a, 0)); 
    return 0; 
} 

int minimum(int n, int a[n], int x) 
{ 
    int minima; 
    if (x >= n) 
    return a[x]; 
    else 
    minima = minimum(n, a, x + 1); 
    if (a[x] > minima) 
    return minima; 
} 
` 

Эй, я немного читал источники рекурсии в stackoverflaw. Также была найдена такая же проблема с использованием JAVA. Не могли бы вы объяснить мне, как работает этот код. Или это хорошая кодировка. Я делаю это самостоятельно, чтобы узнать рекурсию, и она работает. Пожалуйста, объясните.Рекурсия Как найти минимальное значение массива

+0

Есть ли какая-то конкретная часть кода, которую вы не понимаете? –

+6

"stackoverflaw" приятно. – alk

+0

@alk "stackoverflaw": D – P0W

ответ

1

Есть две проблемы в вашем коде:

  • Окончание бывает слишком поздно: вы возвращаетесь a[x] когда x==n - это один элемент в конце прошлого.
  • Отсутствует возврат, когда a[x] > minima является ложным: ваша функция заканчивается без возврата a[x].

Чтобы исправить эти две проблемы, изменить проверку условия завершения, и добавить недостающую возвращение:

if(x >= n-1) return a[n-1]; 
// You do not need an else after a return 
minima = minimum(n,a,x+1); 
if (a[x] > minima) return minima; 
return a[x]; 

Заметьте, что вы можете сохранить один параметр, запустив поиск в конце массива и идти назад, пока не достигнете нулевого индекса.

+0

поэтому последняя строка возвращает [x], если условие не работает правильно. Вы считаете, что этот код правильный. Не существует ли возможного набора данных, который даст неправильный ответ для этого метода? –

+1

@KrvPerera Нет, такого набора данных нет. Вы должны иметь возможность официально доказать это (дайте ему попробовать, это весело! Все, что вам нужно, - это базовое понимание [математической индукции] (http://en.wikipedia.org/wiki/Mathematics_induction)). – dasblinkenlight

+0

Хорошо, я получаю его. Есть ли какой-то лучший рекурсивный код, чтобы сделать то же самое. Может быть, он заменяется хвостовой рекурсивной функцией. –

Смежные вопросы