配列の長さを求める

再帰呼び出しで配列の長さを調べるプログラムがありました。これをwhileを使ったものに直しなさいって、問題でつまづいた・・・。
再帰は配列の要素数をひとつひとつ数えるためにループするよう使っていました。

def array_length(array)
  if array == []
    0
  elsif
    1 + array_length(array[1..-1])
  end
end

再帰するコードは↑上記です。

この部分をwhileで書き換えるのですが・・・。whileの役割はループ。再帰の役割もループ。なのに、whileを使ってループし、再帰で長さを取ろうとしました。これじゃあループのなかにさらにループがあって、さらに中でループして、さらに・・・ ぐだぐだぐだ・・・

def array_length(array)
  len = 0
  while array != []
    len = 1 + array_length(array[1..-1])
  end
  return len
end

↑こんな事してました。・・・あ〜ぁ。混乱しているコードだ・・・。頭の中で「再帰呼び出し→while」が整理できてなかった。

def array_length(array)
  len = 0
  while array != []
    len += 1
    array = array[1..-1]
  end
  len
end

↑ちゃんと直したコード。
プログラミングをする時、どう考えて、どう構成したら、効率的かつ適切にプログラミングできるのだろう。悩む。