#include <iostream>
#include <string>

void recursive_reverse(std::string &s) {
  size_t pos = s.find_last_of(" ");
  // base case - there's no space
  if(pos == std::string::npos) {
    std::cout << s << std::endl;
    return;
  } else {
    std::string substring = s.substr(pos+1);
    std::cout << substring << std::endl;
    std::string rest = s.substr(0, pos);
    // recursive call
    recursive_reverse(rest);
  }
}

int main() {
  std::string s("Hello World!");
  recursive_reverse(s);
  return 0;
}
