我没有在线测试,但是在自己电脑上运行结果还是可以出来的,代码比较冗杂,记录一下自己冗杂的思考
实现步骤分析:
审题:
把每一行看做一个list,试写一个generator,不断输出下一行的list
1. “不断输出“意味着generator内部的循环条件为while True:
2. 杨辉三角的前两行可以视为特殊情况单独处理
根据generator的性质:遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
直接
yield [1]
yield [1,1]
3. 接下来的list(第三行及以后)欲通过计算组合数来算出每一行的每一个元素
组合数公式中涉及到阶乘,所以先定义一个阶乘的函数,根据组合数公式写代码:
def triangles():
while True:
n=2
i=0
list=[]
while i<=n:
t=factorial(n)//(factorial(n-i)*factorial(i))
list.append(t)
i=i+1
yield list
n=n+1
出现的问题:
RecursionError: maximum recursion depth exceeded in comparison
递归错误:在比较中超过最大递归深度
**解决:**发现问题出在定义阶乘函数时候没有考虑n=0的情况,补上关于n=0时的说明即可
def factorial(n):
if n==1:
return 1
elif n==0:
else:
return n*factorial(n-1)
Sign in to make a reply
才子的麦穗
我没有在线测试,但是在自己电脑上运行结果还是可以出来的,代码比较冗杂,记录一下自己冗杂的思考
实现步骤分析:
审题:
把每一行看做一个list,试写一个generator,不断输出下一行的list
1. “不断输出“意味着generator内部的循环条件为while True:
2. 杨辉三角的前两行可以视为特殊情况单独处理
根据generator的性质:遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
直接
yield [1]
yield [1,1]
3. 接下来的list(第三行及以后)欲通过计算组合数来算出每一行的每一个元素
组合数公式中涉及到阶乘,所以先定义一个阶乘的函数,根据组合数公式写代码:
def triangles():
while True:
yield [1]
yield [1,1]
n=2
while True:
i=0
list=[]
while i<=n:
t=factorial(n)//(factorial(n-i)*factorial(i))
list.append(t)
i=i+1
yield list
n=n+1
出现的问题:
RecursionError: maximum recursion depth exceeded in comparison
递归错误:在比较中超过最大递归深度
**解决:**发现问题出在定义阶乘函数时候没有考虑n=0的情况,补上关于n=0时的说明即可
def factorial(n):
if n==1:
return 1
elif n==0:
return 1
else:
return n*factorial(n-1)