Python递归代码(初学者)

时间:2017-03-14 19:55:32

标签: python-3.x recursion

我目前正在尝试创建一个代码,用于计算飞船在一定距离内行进所需的时间,每分钟它将跳过剩余距离的一半。如果距离不到1米,则只需要一分钟。

def space_time(d,t=0):

    if d <= 1:
        print("- It takes 1 minute to travel", d, "meters")
    elif d > 1:
        t = t + 1
        return space_time(d / 2, t)
    else:
        t = t + 1
        print("- ", t, "minutes to travel", d, "meters")


(space_time(10))

输出:

- It takes 1 minute to travel 0.625 meters

Process finished with exit code 0

我可以看到我的问题是t = t + 1.我的想法就是每次重复这个函数时它会加1来表示1分钟。但目前它不起作用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

一个问题是,&#34; elif d&lt; = 1:&#34;要调用的语句,因为条件与&#34; if&#34;完全相同。上面的条件,这意味着永远不会运行此代码。你可能应该更改&#34; elif&#34;到&#34;如果&#34;如果你想让它们都被执行,或者甚至更好,将它们合并在一起

    if d <= 1:
    print("- It takes 1 minute to travel" , d, "meters")

    elif d <= 1:
    t = t + 1
    return space_time(d/2)

答案 1 :(得分:1)

这里有几个问题。一个人,你的&#39; elif&#39;声明正在检查与if相同的条件!我认为你想要超过&#39;。

其次,你总是在开头将t设置为0,而不是通过递归循环传递回来。原来的d也没有传回来。

最后,我不确定else语句应该捕获什么。

编辑:如果0&lt; d&lt; 1,然后需要一分钟。最后的其他人现在抓住了这个。

def space_time(d_0,d=None,t=0):
    if d is None:
        d = d_0
    if d <= 0:
        print("- It takes", t, "minutes to travel" , d_0, "meters")

    elif d > 1:
        t = t + 1
        return space_time(d_0,d/2,t)

    else:
        print("- It takes", t + 1, "minutes to travel" , d_0, "meters")

(space_time(10))

输出:

- It takes 5 minutes to travel 10 meters