递归怎么理解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: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)是一样的。 求 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: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 Twilight6 发表于 2020-6-18 15:59
不是的~ else 才是停止,而if 是设置递归条件,满足条件就递归,不满足就不递归
等于说我虽然求的2的3次方,但是用递归的话power函数对y进行了一共4次计算(包含了终止条件1),比如说 2的平方就是 2 * power(2,2-1)这样去递归计算,最后其实代码的计算过程就是2*2*1对这样简单一些的东西来说递归反而计算复杂了,对吗 Aber 发表于 2020-6-18 16:07
等于说我虽然求的2的3次方,但是用递归的话power函数对y进行了一共4次计算(包含了终止条件1),比如说 2 ...
0的0次方是悬而未决的,在某些领域定义为1、某些领域不定义(无意义)。
刚刚百度到,我纠正下任何除 0 外的 0 次方都为 1
页:
[1]