li1991716 发表于 2019-5-3 20:52:08

使用递归编写一个 power() 函数模拟内建函数 pow(),即 power(x, y) 为计算并返回...

def power(x, y):
    if y:   #这里为什么是y
      return x * power(x, y-1)    #返回的时候为什么是y-1
    else:
      return 1                         #能给讲一下原理吗感激不尽
   
print(power(2, 3))

ba21 发表于 2019-5-3 21:13:56

Power(Number,Power)。其中Number表示底数,Power表示幂值。
如2的3次方,可以写为:POWER(2,3)
从上面话就清楚的可以看出POWER的用法了。
学过数学的人都知道2**3 不就是 2 * 2 * 2 乘3次


回到代码
def power(x, y):
    if y:   #y就是次数咯。 只要不是0 都为真
      return x * power(x, y-1)    # y - 1 下次y不就少1了
    else:
      return 1                         #最后0的时候返回1
   
print(power(2, 3))

代码递归回来结果就是 2*2*2*1

li1991716 发表于 2019-5-4 13:47:39

ba21 发表于 2019-5-3 21:13
Power(Number,Power)。其中Number表示底数,Power表示幂值。
如2的3次方,可以写为:POWER(2,3)
从上面话 ...

我就是搞不懂    return x * power(x, y-1)这句
x* power(x, y-1)不就是x*x*y-1 吗
那上面的ify    才调用了一次呀
x* power(x, y-1)   中的( x, y-1)是表示什么

kaohsing 发表于 2019-5-4 16:31:34

这里用到了递归。

ba21 发表于 2019-5-4 19:17:24

li1991716 发表于 2019-5-4 13:47
我就是搞不懂    return x * power(x, y-1)这句
x* power(x, y-1)不就是x*x*y-1 吗
那上面的if ...

x* power(x, y-1)不就是x*x*y-1 吗 你的理解能力真的是会笑死多少人。
power(x, y-1)是函数,既然是函数,你不用进入函数? 到你这里就成了 x*y-1了?
编程要用脑,不是用眼,一眼能看出来还编屁的程。
2,3数字不大吧,把他带入跟着代码一句句的走,花不了你多少时间。

总的来讲,不是你不理解,是你不原花时间走流程。自以为一眼看过去觉得是什么就是什么。

阳顺 发表于 2019-5-25 22:01:17

本帖最后由 阳顺 于 2019-5-25 22:34 编辑

好像有点通了

jocelyn520 发表于 2019-10-4 11:08:53

好像有点通了{:5_109:}

ThreeCat 发表于 2020-7-20 14:46:00

它不是说直接乘以后面的参数,而是乘以上次调用的结果。

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。


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


个人理解,欢迎指正

qxh1633319233 发表于 2020-12-4 15:02:09

def add(x,y):
      if y:
                print(x,y)
                return x * add(x,y-1)
      else:
                print(x,y)
                return 1
print(add(2,3))

慢慢研究

TC_DHL 发表于 2021-3-10 13:13:48

def aa(x, y):
    if y:
      return x * x * (y-1)
    else:
      return 1
   
print(aa(2, 3))
如果给你这么写 你应该可以看得懂嗷{:5_109:}

lotus8171213 发表于 2023-1-6 14:50:03

def power(x,y):
    if y: # y是次数,只要y不等于0都进入if里面
      print("y="+str(y))
      """
      第一次进入函数y =3 ,进入if,返回的值是2 * 2 * 2
      第二次进入函数y=2,进入if,调用上次返回的结果是 2 * 2 * 2 * (2-1) = 2 * 2 * 2 * 1
      第三次进入函数y=1,进入if,调用上次返回的结果是 2 * 2 * 2 * 1 * 0(任何非0实数的0次幂都等于1,0的0次幂无意义.)
      所以第三次就是y-1 = 0,else里面返回的是1也就是,2 * 2 * 2 * 1 * 1 = 2 * (2 * (2 * (1 * 1))) 返回的2的3次幂是8
      """
      return x * power(x,y-1)
    else:
      print("y="+str(y)+",y为false已退出")
      # 最后0的时候返回1
      return 1

print(power(2,3))
页: [1]
查看完整版本: 使用递归编写一个 power() 函数模拟内建函数 pow(),即 power(x, y) 为计算并返回...