2015-06-18 2 views
4

Независимо от ввода, результат всегда равен 0. Почему?Поиск минимума с рекурсивной функцией

#include <stdio.h> 
#include <conio.h> 

int rekursiv(int v[], int i, int n, int *min); 

int main(void) 
{ 
    int v[ 100 ]; 
    int n, i, min; 

    printf("Shkruanni n: "); 
    scanf("%d", &n); 
    printf("Shkruani elementet e vektorit.\n"); 
    for(i = 0; i < n; i++){ 
     scanf("%d", &v[ i ]); 

     }//end for 
    min = v[ 0 ]; 
    i = 1; 
    printf("Minimumi eshte %d.", rekursiv(v, i, n, &min)); 

    getche(); 
    return 0; 
}//end main 

int rekursiv(int v[], int i, int n, int *min) 
{ 
    if(i == n - 1) { 
     return *min; 
    }//end if 
    else { 
     if(*min < v[ i ]) { 
      *min = v[ i ]; 
     }//end if 
     rekursiv(v, i + 1, n, min); 
    }//end else 

}//end rekursiv 
+0

Может быть, вы должны включать в себя небольшое описание кода – Levi

+1

'#include stdio.h #include conio.h'? Куда делся '<>'? –

+0

Почему рекурсивный? Это перебор. –

ответ

6

Вы должны скомпилировать с включенными предупреждениями. rekursiv не всегда возвращает значение.

Изменить

rekursiv(v, i + 1, n, min); 

к

return rekursiv(v, i + 1, n, min); 
+0

Я уверен, что и msvc, и gcc будут давать предупреждения об этом с настройками по умолчанию. Я бы предположил, что он просто не читал их, потому что все знают, что предупреждения нормальные. – meneldal

0

В функции (INT rekursiv (интермедиат v [], INT I, Int N, Int * мин)), должно быть возвращение в целое число так ваше последнее условие ничего не возвращает. Вы должны проверить последнее условие ELSE

else { 
     if(*min < v[ i ]){ 
      *min = v[ i ]; 

      }//end if 
     rekursiv(v, i + 1, n, min); 

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