생각을 바꿔서 상위 노드는 하위 노드의 1/2의 값이 되어, 하나씩 상위노드로 갈수 있는 점을 고려하면 된다.
그러면서 node값을 하나씩 증가 시킨다.
 
n, m = map(int, input().split())
 
def node(a, b):
#  print("a:", a, "b:", b)
  if a == b:
    return 0
  elif a < b:
    return node(a, b // 2) + 1
  elif a > b:
    return node(a // 2, b) + 1
 
 
print(node(n, m))
 
n, m = map(int, input().split())
 
def factorial(a,res):
  if a == 1:
    return res
  else:
    res=res*a
    return factorial(a-1,res)
 
up=factorial(n,1)
d1=factorial(m,1)
d2=factorial(n-m,1)
 
#print("up:",up,"d1:",d1,"d2",d2)
print(up//(d1*d2))
일단 빨리 풀자
 
import math 
 
n, m = map(int, input().split())
 
print(math.gcd(n, m))
 
 
 
n = int(input())
 
 
def print_star(a):
  if a<=n:
    print('*'*a)
    return print_star(a+1)
  else:
    return 0
 
print_star(1)
 
구글링했는데, 이해 안감
 
def wubak(n):
  if n == 1:
    return print(n)
 
#  print("9:", n)  
 
  if n % 2 == 1:
#    print("10:", n)
    wubak(3 * n + 1)
  else:
#    print("11:", n)
    wubak(n // 2)
 
  return print(n)
 
a = int(input())
wubak(a)
 
왜 처음 if에 a==1을 넣어야만 loop를 끝내는가? 마지막에 넣으면 계속 돈다....
 
n = int(input())
 
def certain_no(a):
  print(a)
  if a==1:
    return 0
  elif a%2==1:
    a=3*a+1
#    print("1:",a)
    return certain_no(a)
  elif a%2==0:
 #   print("2:",a//2)
    return certain_no(a//2)
 
certain_no(n)

+ Recent posts