ある関数の内部で自分自身を呼び出して処理を繰り返す。
確実に「繰り返しの終わり」がくるようにしなければならない。
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)} です"