Wsg624 发表于 2020-4-17 12:02:49

第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:58

?什么意思

Wsg624 发表于 2020-4-17 12:08:18

qiuyouzhi 发表于 2020-4-17 12:03
?什么意思

2*power(2,4)   是2*2而不是2*4,有点没想明白.....

qiuyouzhi 发表于 2020-4-17 12:08:37

x就是参数里的x啊,每次把那个x提出来进行下一次运算

Wsg624 发表于 2020-4-17 12:16:56

qiuyouzhi 发表于 2020-4-17 12:08
x就是参数里的x啊,每次把那个x提出来进行下一次运算

是if y把y设定成了判断条件,然后下面的power(x,y)都是把x作为每次的运算参数么?

qiuyouzhi 发表于 2020-4-17 12:18:35

Wsg624 发表于 2020-4-17 12:16
是if y把y设定成了判断条件,然后下面的power(x,y)都是把x作为每次的运算参数么?

对的,因为x是底数

zltzlt 发表于 2020-4-17 13:12:40

这是幂,不是乘法

ThreeCat 发表于 2020-7-20 14:38:12

本帖最后由 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。


这个过程也印证了为什么递归的两个基本条件的第二条 “设置了正确的返回条件


个人理解,欢迎指正

雪域谜城 发表于 2020-7-20 16:26:01

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]
查看完整版本: 第22讲使用递归模拟power,return x * power(x, y-1)是如何把x提出来相乘