Tower Hopper problem recursive approach
The recursion stop condition looks clumsy. First, inside the if clause you already know that jumpTower == 0. Second,

    if (condition)
        return 1;
    else
        return 0;


is a long way to say return condition. Suggested rewrite:

    if (jumpTower == 0) {
        return towers[0] &gt;= targetTower;
    }




The two recursive calls differ only by the last parameter. This strongly hints to make the function tail-recursive:

    if (jumpTower + towers[jumpTower &gt;= targetTower) {
       targetTower = jumpTower;
    }
    jumpTower -= 1;
    return is_hoppable(towers, jumpTower, targetTower);


and mechanically eliminate tail recursion (sorry for another shameless self promotion):

    while (jumpTower &gt; 0) {
        if (jumpTower + towers[jumpTower &gt;= targetTower) {
           targetTower = jumpTower;
        }
        jumpTower -= 1;
    }
    return towers[0] &gt;= targetTower;


Now the problem is reduced to a single loop. It doesn't look right. But don't blame me. It is a mechanical rewrite (much like a C compiler would do), so if there's a problem here, there must be a problem in the original code.



The printf line is too long to my taste. I was almost sure that you print int as %s. Then I scrolled.



Returning bool rather than int would clarify intentions.