当递归if语句时,递归导致永不结束错误

时间:2013-09-14 23:13:28

标签: python boolean

我不知道这是否完全与recusion相关,但我在main函数中添加了一个小函数来阻止非整数输入

def main(depth, size):
    depth = eval(input("Enter depth that is an integer: "))
    if (isinstance( depth, int)) == False:
        print( 'Not an integer' )
        main(depth, size)
    else:
        pass
    turtle.left(120)
    turtle.speed(100)
    triangle(depth, size)

def triangle(depth, size):
    if depth == 0:
        pass
    else:
        turtle.forward(size)
        triangle(depth-1, size/2)
        turtle.right(120)
        turtle.forward(size)
        turtle.left(120)
        triangle(depth-1, size/2)
        turtle.right(120)
        turtle.right(120)
        turtle.forward(size)
        turtle.right(120)

main(depth, 100)

当我输入一个整数时,程序运行正常,当我输入一个非int时,它返回并告诉我它不是一个整数并返回到输入阶段。然后,当我输入一个整数时,它开始绘制图片,然后再进一步,在第27行的一个递归中挂起“三角形(深度-1,大小/ 2)”。

我已经接近完成这个程序,我只需要让它更难崩溃。

1 个答案:

答案 0 :(得分:1)

用户输入不是(非尾部)递归的良好候选者,因为深度是无限的。只是迭代地做:

def main(size):
    while True:
        depth = input("Enter depth that is an integer: ")
        try:
            depth = int(depth)
        except ValueError:
            print('Not an integer')
        else:
            break

    turtle.left(120)
    turtle.speed(100)
    triangle(depth, size)