Aber 发表于 2020-6-18 15:50:22

递归怎么理解2个参数计算?

def power(x,y):

    if y:
      return x * power(x,y-1)
    else:
      return 1



#求 x 的 y 次幂,if y是设置停止条件对吗?因为不能有0次幂? 当y为True的时候 x * power(x,y-1)怎么理解,比如 x = 2y = 3的话?计算过程是什么样子的{:10_277:}

heidern0612 发表于 2020-6-18 15:54:44

本帖最后由 heidern0612 于 2020-6-18 15:56 编辑

if y表示如果y不为零的话,就返回x * power(x,y-1).

否则的话(y为0)返回1.任何数的0次方都是1.

power只是个计算次幂的函数,知道这么算就行了。

x为2,y为3的话,就是2的3次方,返回 2*Pow(2,2),返回的结果就是2的3次方。

因为x本身也代表了一次y的一个次幂数,所以y减去了1。

跟你直接返回pow(2,3)是一样的。

Twilight6 发表于 2020-6-18 15:59:27

求 x 的 y 次幂,if y是设置停止条件对吗?

不是的~ else 才是停止,而if 是设置递归条件,满足条件就递归,不满足就不递归

因为不能有0次幂?

任何数的0次幂都是 0包括 0

当y为True的时候 x * power(x,y-1)怎么理解,比如 x = 2y = 3的话?计算过程是什么样子的

看注释:

def power(x,y):

    if y: # 初始值 x = 2 ,y = 3
      # 第一次递归x = 2 , y = 2 满足条件继续进入 if
      # 第二次递归x = 2 ,y = 1 满足条件进入 if
      # 第三次递归x = 2 , y = 0 不满足条件 进入else

      return x * power(x,y-1)# 2*power(2,2)第一次进入递归
    # 第一次递归返回: 2 * power(2,1) 进入第二次递归
    # 第二次递归返回: 2 * power(2,0) 进入第三次递归

    else:
      return 1# 返回 1
    # 递归返回顺序 power(2,0) -> power(2,1) ->power(2,2) -> power(2,3)
    #返回值:      1   -> 2*1      ->2*2*1 ->   2*2*2*1
print(power(2,3))

# 最后结果为 8

jackz007 发表于 2020-6-18 16:02:40

本帖最后由 jackz007 于 2020-6-18 16:07 编辑

power(2 , 3)
= 2 * power(2 , 2)             # power(2 , 3) = 2 * power(2 , 2)
= 2 * 2 * power(2 , 1)         # power(2 , 2) = 2 * power(2 , 1)
= 2 * 2 * 2 * power(2 , 0)   # power(2 , 1) = 2 * power(2 , 0)
= 2 * 2 * 2 * 1                # power(2 , 0) = 1

Aber 发表于 2020-6-18 16:07:25

Twilight6 发表于 2020-6-18 15:59
不是的~ else 才是停止,而if 是设置递归条件,满足条件就递归,不满足就不递归




等于说我虽然求的2的3次方,但是用递归的话power函数对y进行了一共4次计算(包含了终止条件1),比如说 2的平方就是 2 * power(2,2-1)这样去递归计算,最后其实代码的计算过程就是2*2*1对这样简单一些的东西来说递归反而计算复杂了,对吗

Twilight6 发表于 2020-6-18 16:09:09

Aber 发表于 2020-6-18 16:07
等于说我虽然求的2的3次方,但是用递归的话power函数对y进行了一共4次计算(包含了终止条件1),比如说 2 ...


0的0次方是悬而未决的,在某些领域定义为1、某些领域不定义(无意义)。
刚刚百度到,我纠正下任何除 0 外的 0 次方都为 1
页: [1]
查看完整版本: 递归怎么理解2个参数计算?