第22讲使用递归模拟power,return x * power(x, y-1)是如何把x提出来相乘
本帖最后由 Wsg624 于 2020-4-17 12:13 编辑def power(x, y):
if y:
return x * power(x, y-1)
else:
return 1
return x * power(x, y-1)带入 (2,4)的话就是 2 * power (2,4-1)-> 2 * power(2 ,3)->2*2,为什么不是2*3 ?什么意思 qiuyouzhi 发表于 2020-4-17 12:03
?什么意思
2*power(2,4) 是2*2而不是2*4,有点没想明白..... x就是参数里的x啊,每次把那个x提出来进行下一次运算 qiuyouzhi 发表于 2020-4-17 12:08
x就是参数里的x啊,每次把那个x提出来进行下一次运算
是if y把y设定成了判断条件,然后下面的power(x,y)都是把x作为每次的运算参数么? Wsg624 发表于 2020-4-17 12:16
是if y把y设定成了判断条件,然后下面的power(x,y)都是把x作为每次的运算参数么?
对的,因为x是底数
这是幂,不是乘法 本帖最后由 ThreeCat 于 2020-7-20 14:43 编辑
它不是说直接乘以后面的参数,而是乘以上次调用的结果。
def power(x, y):
if y:
return x * power(x, y-1)
else:
return 1
这里的return 1很重要,return 1是说y=0时函数运行结果返回1,这个y-1总会等于0,那么我们就从0开始倒着算,
如果参数是2,4,你可以把这个过程分解为:
y=0那次执行函数返回1;
y=1那次返回的是2*1 = 2;
y=2那次返回的是2*(2*1) = 4;此处加括号为了看起来明了。
y=3那次返回的是2*(2*(2*1)) = 8;
y=4那次返回的是2*(2*(2*(2*1))) = 16。
这个过程也印证了为什么递归的两个基本条件的第二条 “设置了正确的返回条件
个人理解,欢迎指正 def power(x, y):
if y:
return x * power(x, y-1)
else:
return 1
power(x,y)=x^1*power(x,y-1)=x^2*power(x,y-2)=x^y*power(x,y-y)=x^y*power(x,0)=x^y*1=x^y
页:
[1]