|
发表于 2020-6-14 09:53:30
|
显示全部楼层
本楼为最佳答案
本帖最后由 Twilight6 于 2020-6-14 10:09 编辑
你没点回复别人看不见你发的,看注释吧
0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值
- # 案例一
- def power(x,y):
- result = 1 # 初始化一个值
- if y == 0:
- return result # 所有数的 0 次幂都为 1
- while y: # 循环计算结果
- if y < 0: # 次幂 小于 0 是 1/x 形式
- result /= x
- y += 1
- if y > 0: # 次幂 大于 0 是 x*x 的形式
- result *= x
- y -= 1
- return result
复制代码
- # 案例一简化版
- def power(x,y):
- if y < 0:
- return 1/x**(-y)
- return x**y
复制代码
1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
原答案:
- # 案例二
- def gcd(x, y):
- if y:
- return gcd(y, x % y)
- else:
- return x
复制代码
- # 案例二注释版,假设传入的 x , y 分别是 4,6
- def gcd(x, y): #开始时候传入 x = 4 ; y = 6
- # 第一次递归 x = 6 y = 4
- # 第二次递归 x = 4 y = 2
- if y:
- # 刚开始 y = 6 条件成立执行if代码块
- # 第一次递归 y = 4 继续进入 if 代码块
- # 第二次递归 y = 2 继续进入 if 代码块
- # 第三次递归 y = 0 条件不成立则进入else 代码块
- return gcd(y, x % y)
- # 进入第一次递归 gcd(6,4%6)即 gcd(6,4)
- # 进入第二次递归 gcd(4,6%4) 即gcd (4,2)
- # 进入第三次递归 gcd (2,4%2)即 gcd (2,0)
- else:
- return x # 第三次递归返回 x = 2
- # 然后依次返回 先从第三次递归开始 gcd(2,0) -> gcd(4,2) -> gcd(6,4) -> gcd(4,6)
复制代码
2. 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(脑补链接)的方式,结果与调用bin()一样返回字符串形式。
- def mybin(x):
- temp = ''
- if x < 1:
- return ''
- else:
- temp += str(x%2)
- return mybin(x//2)+temp
复制代码 |
|