What is the the difference between the following implementations of the length function?
int length(List l) { int len = 0; while(l != NULL) { l = l->next; len++; } return len; }
int length(List l) { if(l == NULL) return 0; return 1 + length(l->next); }
int length(List l) { int length-helper(List l, int len) { if(l == NULL) return len; return length-helper(l->next, len+1); } return length-helper(l, 0); }