Discuss / Python / 强行解题最为致命,我还是学习一下大佬的去吧

强行解题最为致命,我还是学习一下大佬的去吧

Topic source

我没有在线测试,但是在自己电脑上运行结果还是可以出来的,代码比较冗杂,记录一下自己冗杂的思考

实现步骤分析:

审题:

把每一行看做一个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)


  • 1

Reply