関数の再帰処理について2分で語ってみた

慌てない慌てない一休み一休み

この記事を三行にまとめると

コラッツ予想の再帰処理
アルファベットを大文字で出力
数字を2倍し続ける
この記事は以下の動画の中に出てきたサンプルコードを載せたものです。コピペなどが必要なときに使ってください。





偶数だったら2で割り奇数だったら3倍して1を足す関数

def Collatz(n):
  if n % 2 == 0:
    n = n // 2
  else:
    n = n * 3 + 1

  print(n)

Collatz(2)
Collatz(3)



答えが1より大きかったらもう一度同じ計算をする

def Collatz(n):
  n = n // 2 if n % 2 == 0 else n * 3 + 1

  if n > 1:
    n = n // 2 if n % 2 == 0 else n * 3 + 1

  print(n)

Collatz(3)



答えが1になるまで処理を繰り返す

def Collatz(n):
  n = n // 2 if n % 2 == 0 else n * 3 + 1

  if n > 1:
    Collatz(n)
  else:
    print('1になりました')

Collatz(3)



何回計算したかを出力

def Collatz(n, c = 1):
  n = n // 2 if n % 2 == 0 else n * 3 + 1

  if n > 1:
    c += 1
    Collatz(n, c)
  else:
    print(str(c) + '回で1になりました')

Collatz(3)



while文で処理する場合

def Collatz(n):
  c = 0

  while n > 1:
    n = n // 2 if n % 2 == 0 else n * 3 + 1
    c += 1
    
  print(str(c) + '回で1になりました')

Collatz(3)



リストのアルファベットを大文字で出力

arr = ['abc', 'def']

for text in arr:
  print(text.upper())



リストが多重だった場合

# 二重の場合
arr = ['abc', 'def', ['www', 'xyz']]

for text1 in arr:
  if isinstance(text1, str):
    print(text1.upper())
  else:
    for text2 in text1:
      print(text2.upper())

# 三重の場合
arr = ['abc', 'def', ['www', 'xyz', ['tkg', 'orz']]]

for text1 in arr:
  if isinstance(text1, str):
    print(text1.upper())
  else:
    for text2 in text1:
      if isinstance(text2, str):
        print(text2.upper())
      else:
        for text3 in text2:
          print(text3.upper())



再起的に出力

def upper_recursive(arr):
  for text in arr:
    if isinstance(text, str):
      print(text.upper())
    else:
      upper_recursive(text)

arr = ['abc', 'def', ['www', 'xyz', ['tkg', 'orz']]]
upper_recursive(arr)



数字を2倍し続ける関数

def multiple(n):
  n *= 2
  print(n)

  if n < 1000:
    multiple(n)

multiple(2)
 もしかしたら何か関連しているかも? 
 みんなからのコメント 
まだコメントはいただけてないみたい……