配列の長さを求める
再帰呼び出しで配列の長さを調べるプログラムがありました。これを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
↑ちゃんと直したコード。
プログラミングをする時、どう考えて、どう構成したら、効率的かつ適切にプログラミングできるのだろう。悩む。