python 第一版 22课 课后题
使用递归编写一个 power() 函数模拟内建函数 pow(),即 power(x, y) 为计算并返回 x 的 y 次幂的值。小甲鱼老师的答案是
def power(x, y):
if y:
return x * power(x, y-1)
else:
return 1
print(power(2, 3))
这里我看不懂的是 return x*power(x,y-1) 这是怎么乘除的啊没看懂
小甲鱼老师给的是递归的,但是我想要迭代的,下面是我同学教我的迭代的 还是看不懂发求助
def power(x,y):
result = 1
for i in range(y):
result *= x
return result
这里我搞不懂的是 for i in rang(y) 和 return *= x 的关系
下面是我的理解
第一行是设置函数poweer(x,y)
第二行是设置一个初始值为1的数字
第三行是for循环把 i 插入进去使得 y 这个数字从 0 开始到 y-1
第四行是x总结果 = 1 * x
第五行是返回值
我感觉这代码运行不了但是它可以 x y 的关系怎么弄的呀
求大佬回答我困一天了 关于递归和迭代两种实现方式,我来帮你一步步分析:
一、递归版本解析:
def power(x, y):
if y: # 当y不为0时(Python中0为False)
return x * power(x, y-1)# 关键点:拆解为 x * (x的y-1次方)
else:
return 1# y=0时返回1(任何数的0次方等于1)
计算过程示例(2的3次方):
1. power(2,3) → 2 * power(2,2)
2. power(2,2) → 2 * power(2,1)
3. power(2,1) → 2 * power(2,0)
4. power(2,0) → 1
↑ 递归展开结束,开始返回 ↓
3. 2 * 1 = 2
2. 2 * 2 = 4
1. 2 * 4 = 8 → 最终结果
二、迭代版本解析:
def power(x, y):
result = 1 # 初始化结果为1(应对y=0的情况)
for i in range(y):# 循环y次(如y=3则循环3次)
result *= x # 等价于 result = result * x
return result
关键点:
1. range(y) 生成 共y个数字
2. 循环次数 = y的值(与i的具体数值无关)
3. result *= x 表示每次循环将当前结果乘以x
计算流程(2的3次方):
循环次数i的值result变化过程
初始-result = 1
第1次0result = 1*2 = 2
第2次1result = 2*2 = 4
第3次2result = 4*2 = 8
三、你的理解修正:
> 第四行是 x总结果 = 1 * x
这里需要修正:result *= x 不是直接用1乘x,而是用当前result的值乘x
第一次:result = 1 * x
第二次:result = (1*x) * x
第三次:result = (1*x*x) * x
...
第y次:result = x^y
四、对比总结:
[*]递归:通过函数自我调用分解问题(从y到0)
[*]迭代:通过循环累乘解决问题(从1开始乘y次)
两种方法都正确,迭代版本更直观且效率更高(递归有深度限制)。建议用迭代版本,理解后可以自己写个计算过程表验证!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 1,x的y次方就是x*x的y-1次方,对吧
2,range()几就执行几次,因为从零开始
所以把x乘y次方就是乘y个x
某一个“天” 发表于 2025-7-16 17:20
1,x的y次方就是x*x的y-1次方,对吧
2,range()几就执行几次,因为从零开始
可是之前讲课**不是次方吗?
我记得*是乘法 qasa 发表于 2025-7-16 20:41
可是之前讲课**不是次方吗?
我记得*是乘法
对啊
剩下是数学知识 某一个“天” 发表于 2025-7-16 17:20
1,x的y次方就是x*x的y-1次方,对吧
2,range()几就执行几次,因为从零开始
我觉得可以给个最佳{:7_146:}
页:
[1]