使用递归编写一个 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))
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 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)是表示什么
这里用到了递归。
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:34 编辑
好像有点通了 好像有点通了{:5_109:} 它不是说直接乘以后面的参数,而是乘以上次调用的结果。
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 add(x,y):
if y:
print(x,y)
return x * add(x,y-1)
else:
print(x,y)
return 1
print(add(2,3))
慢慢研究
def aa(x, y):
if y:
return x * x * (y-1)
else:
return 1
print(aa(2, 3))
如果给你这么写 你应该可以看得懂嗷{:5_109:} 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]