максимизировать функцию с помощью рекурсии переполнения стека

Я пытаюсь максимизировать эту функцию в C ++:

введите описание изображения здесь

Я поместил это в функцию:

int F(int n , int T ){

if( T >= 0  &&  n == 0){

return 0;

}else if( T < 0){

return INT_MIN;

} else if(T >= 0  &&  n > 0){

for(int i = 0 ; i <= m[n-1] ; i++){

ganancia = max(i * v[n-1] + F(n-1,T-i*t[n-1]),ganancia );

}

}

}

но когда я ставлю n 3, T 8, t {1, 2, 2}, v {12, 15, 30} и, наконец, на m {3, 3, 2}, моя программа возвращает 2, когда она должна была вернуть 99 ,

1

Решение

У вас есть три ветви в функции, но только два возвращаемых значения. Если вы не сможете вернуть значение, у вас будет неопределенное поведение. Вам необходимо вернуть значение из всех филиалов.

1

Другие решения

Теперь у меня есть такой код:

int F(int n , int T ){

if( T >= 0  &&  n == 0){

return 0;

}else if( T < 0){

return INT_MIN;

} else if(T >= 0  &&  n > 0){

for(int i = 0 ; i <= m[n-1]-1 ; i++){

return (max(i * v[n-1] + F(n-1,T-i*t[n-1]),(i+1) * v[n-1] + F(n-1,T- (i+1)*t[n-1]) ));

}

}

}

И теперь он показывает мою программу 12 вместо 13, по крайней мере, я оставил это значение 2. Спасибо!

0

По вопросам рекламы [email protected]