関数の再帰処理について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)
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください