Python 中的指数递归

Recursion in Python with exponents

作为练习,我必须完成演示 python 中递归的代码。

我得到了代码并被告知要完成它,例如,4^2 = 16

def raise_to_power(base_val, exponent_val):
   if exponent_val == 0:
      result_val = 1
   else:
      result_val = base_val * #start entering code here

   return result_val

user_base = 4
user_exponent = 2

print('%d^%d = %d' % (user_base, user_exponent,
      raise_to_power(user_base, user_exponent)))

我知道他们要我做什么,但我不知道如何表达。我试着做 base_val ** exponent_val,但它说语法无效。它还说不要使用 math.pow() 函数。

谁能帮我理解一下?我发现很难获得递归。

将函数更改为:

def raise_to_power(base_val, exponent_val):
    return base_val * raise_to_power(base_val, exponent_val - 1) if exponent_val else 1

在递归函数中,您必须从函数体内再次调用函数并设置一个或多个条件来中断函数的递归调用。

为了更好的理解你可以使用dis.dis通过反汇编看CPython字节码的分析:

>>> dis.dis(raise_to_power)
  2           0 LOAD_FAST                1 (exponent_val)
              3 POP_JUMP_IF_FALSE       27
              6 LOAD_FAST                0 (base_val)
              9 LOAD_GLOBAL              0 (raise_to_power)
             12 LOAD_FAST                0 (base_val)
             15 LOAD_FAST                1 (exponent_val)
             18 LOAD_CONST               1 (1)
             21 BINARY_SUBTRACT     
             22 CALL_FUNCTION            2
             25 BINARY_MULTIPLY     
             26 RETURN_VALUE        
        >>   27 LOAD_CONST               1 (1)
             30 RETURN_VALUE        

以及额外信息 read more about recursion on WIKI

只需简单修改您的代码即可。它看起来像你的代码。

def raise_to_power(base_val, exponent_val):
   if exponent_val == 0:
      return 1
   else:
      return base_val * raise_to_power(base_val, exponent_val-1)

user_base = 4
user_exponent = 2

print('%d^%d = %d' % (user_base, user_exponent,
      raise_to_power(user_base, user_exponent)))

递归函数:

递归是一种编程问题的方法,其中函数在其主体中调用自身一次或多次。通常,它是 returning 这个函数调用的 return 值。 Link


通过递归调用将数字从 5 添加到 0 的简单示例:

代码:

def addNumbers(n):
    print "Debug 1: n=%d"%(n)
    if n==0:
        print "Debug 2: n=%d"%(n)
        return 0
    else:
        print "Debug 3: n=%d"%(n)
        ans = n + addNumbers(n-1)
    print "Debug 4: n=%d, ans=%d"%(n, ans)
    return ans

add_nos = addNumbers(5)
print "\nFinal Addition:", add_nos

输出:

$ python 4.py 
Debug 1: n=5
Debug 3: n=5
Debug 1: n=4
Debug 3: n=4
Debug 1: n=3
Debug 3: n=3
Debug 1: n=2
Debug 3: n=2
Debug 1: n=1
Debug 3: n=1
Debug 1: n=0
Debug 2: n=0
Debug 4: n=1, ans=1
Debug 4: n=2, ans=3
Debug 4: n=3, ans=6
Debug 4: n=4, ans=10
Debug 4: n=5, ans=15

Final Addition: 15