heapify last 3 lines
You are asking several related questions. I will only answer the first one. The heapify procedure gets an almost-heap $A$ and a node $i$. The heap property is satisfied for all nodes except for $i$. Heapify proceeds as follows:


Determine the largest child $j$ of $i$.
If $A[i] \geq A[j]$, the heap property is already satisfied.
Otherwise, exchange $A[i]$ and $A[j]$, and run heapify on $A$ and $j$.


After the exchange, the heap property is no longer violated for $i$, but might be violated for $j$. For this reason we have to call heapify recursively on the node $j$.

I suggest you try a few examples and see for yourself that sometimes the recursive call is necessary.