С самого начала, возможно, исправление состоит в том, чтобы отслеживать самый высокий выход n
до сих пор и выводить только тогда, когда встречается больший n
. (Возможно, это не самое лучшее решение 1004 *, но я чувствую себя слишком уставшим и ленивым, чтобы думать об альтернативах)
Не используйте глобальную переменную для этого ( изменяемое глобальное состояние является анти-шаблоном! ) - вам нужно будет передать его в качестве другого параметра.
int output_n_and_val( int n, int val, int& biggestN ) {
if( n > biggestN ) {
cout << "(" << n << ") = " << val << endl;
biggestN = n;
}
return val;
}
int recursiveFuncImpl( int n, int& biggestN ) {
if( n == 1 ) {
return output_n_and_val( n, -1, biggestN );
}
else if( n == 2 ) {
return output_n_and_val( n, -1, biggestN );
}
else {
int val = 2 * ( recursiveFuncImpl( n - 1, biggestN ) + recursiveFuncImpl( n - 2, biggestN ) );
return output_n_and_val( n, val, biggestN );
}
}
// Entrypoint function:
int recursiveFunc( int n ) {
int biggestN = -1;
return recursiveFuncImpl( n, biggestN );
}
int main()
{
recursiveFunc( 10 );
recursiveFunc( 5 );
return 0;
}
Недостатком этого подхода является то, что из-за n == 2
происходит обработка регистра до n == 1
вы никогда не получите вывод (1) = -1
. Исправление это упражнение, оставленное для читателя.