ある関数の内部で自分自身を呼び出して処理を繰り返す。
確実に「繰り返しの終わり」がくるようにしなければならない。
class NumOfOne def main puts "適当な数値を入力して下さい" i = gets.chomp.to_i puts "#{i}の中に 1 は #{p_numOfOne( i )} 個含まれています。" end private def p_numOfOne( value ) ret = 0 # value を10で割って桁をずらしながら、最下位の桁が1であるかどうかを調べる while value > 0 if value % 10 == 1 ret += 1 end value = value / 10 end return ret end end countOne = NumOfOne.new countOne.main
class NumOfOne def main puts "適当な数値を入力して下さい" i = gets.chomp.to_i puts "#{i}の中に 1 は #{p_numOfOne( i )} 個含まれています。" end private def p_numOfOne( value ) ret = 0 if value == 0 # value が0桁(これ以上解析する桁がない) return 0 end if (value % 10) == 1 # 一番下の位が1 ret = 1 else ret = 0 end return ret + p_numOfOne( value / 10 ) end =begin # 三項演算子「?」を使った場合 def p_numOfOne( value ) if (value == 0) return 0 end return (((value % 10) == 1) ? 1 : 0) + p_numOfOne(value / 10) end =end end countOne = NumOfOne.new countOne.main
def gcd( a, b ) i = a while i > 0 break if (a % i == 0 && b % i == 0) i -= 1 end return i end
def gcd( a, b ) i = a while i > 0 break if (a % i == 0 && b % i == 0) i -= 1 end return i end def multi_gcd( n, use ) # use == 2 数が2つしかない場合は、普通に gcd を呼び出す if use == 2 return gcd(n[0], n[1]) end # use > 2 の場合は、n[n] と n[0]..n[n-1]の gcd を呼び出す return gcd(n[n.length - 1], multi_gcd(n, use - 1)) end array = [98, 140, 84, 28, 42, 126] puts "配列 N の最大公約数は #{multi_gcd(array, array.length)} です"