What is the algorithmic complexity of this?
Your algorithm has O(n^2) worst case complexity. You have a for loop of O(n). Inside your for loop you have a while loop which is O(currentNum). So if your currentNum is O(n) (ex nums[i] = length.nums for each i) then the complexity is O(n*n) = O(n^2).

Hint

Try not to recalculate things. You could use Dynamic programming technique. You need:

def canJump(i):
    if valid[i] has been assigned a True or False value:
        return valid[i]
    #else calculate valid[i]
    if i + nums[i] &gt; len(nums):
        valid[i] = True
        return valid[i]
    for jump in range(1, len(nums[i])):
        valid[i] = any(False, canJump(i + jump))
    return valid[i]

print(canJump(0))


This is just a pseudocode. I have not tried it.
This way you only visit an element of nums once so it’s O(n).

[EDIT]
Actually I am wrong. My code is also O(n^2). Here is an O(n) solution.

at_least = n 
for i from n-1 to 0:
    if nums[i] + i &gt;= at_least:
        at_least = i 
if at_least == 0: True else False


Now I think this is right. Sorry for the confusion. I got confused too.