I am trying to write a program that'll find the length of the longest (adjacent) increasing subsequence in a vector with n elements.
I have written my code with recursion for exercise on understanding the subject. When trying to compile the program earlier, instead of 4, my output was 12 on getting the longest increasing sequence. I'm trying to get the correct output. I'm under suspicion that my counters are not incrementing correctly. My "largest element" function works properly, but my issues lie within my sequence function. Help would be appreciated. I am still learning how recursion works.
Here is my code (.hpp file just has my two prototypes):
#include <iostream>
#include <vector>
#include "increasing_sequences_recursive.hpp"
int main() {
std::vector<int> numbers;
int input;
int startIdx = 0;
std::cout << "Enter a set of numbers (0 to stop): " << std::endl;
while (true) {
std::cin >> input;
if (input != 0) {
numbers.push_back(input);
}
else {
break;
}
}
startIdx = numbers.size();
std::cout << "Length of longest sequence: " <<
increasing_sequences_recursive(numbers, startIdx);
return 0;
}
// Recursively find the largest sequence
int increasing_sequences_recursive(std::vector<int> &numbers, int startIdx) {
int counter = 0;
int maxCounter = 0;
if (startIdx == 1) {
return 1;
}
int largeElmt = largestElement(numbers, startIdx);
counter += increasing_sequences_recursive(numbers, startIdx - 1);
if (numbers[startIdx - 1] <= largeElmt) {//numbers[startIdx]) {
counter++;
if (counter >= maxCounter) {
maxCounter = counter;
}
}
else {
if (counter >= maxCounter) {
maxCounter = counter;
}
}
return maxCounter;
}
// Recursively find the largest element.
int largestElement(std::vector<int> &numbers, int n) {
// Assume n >= 1; Find largest element in the first
// n elements of n "numbers"
if (n == 1)
return numbers[n - 1];
int res = largestElement(numbers, n - 1);
if (res > numbers[n - 1])
return res;
return numbers[n - 1];
}