2

我需要有一个返回 type 的保证输入的函数float。为了实现这一点,我想出了一种递归方式,但仅仅几秒钟后,我意识到我也可以使用while-loop。

那么,首选哪一个呢?有理由使用其中一个吗?

由于 Python 没有尾调用(afaik?),我很确定我应该使用while循环,但我仍然不是 100% 有信心。

这是我的两个功能:

def inputf(prompt=None):
    try:
        return float(input(prompt))
    except ValueError:
        return inputf(prompt)

def inputf2(prompt=None):
    while True:
        try:
            return float(input(prompt))
        except ValueError:
            pass
4

4 回答 4

2

我猜使用递归函数,你最终会遇到这个异常:

RuntimeError: maximum recursion depth exceeded

但那是在 256 次递归之后(甚至更多,取决于您运行 Python 的系统)。

于 2013-05-02T21:42:53.437 回答
1

我会说两者都是可以接受的,并且与它们中的任何一个都没有太大的优势。用户不太可能(但你永远不知道)使用递归函数输入一个数字超过一百次。

如果您想坚持使用递归,但又担心达到递归限制,您可以将其设置为更高的值,但这是针对极端情况的情况。

import sys
sys.setrecursionlimit(10000)

虽然,我可能会使用 while 循环,因为它可能更容易理解。

于 2013-05-02T21:40:42.977 回答
1

我会说首选方法是使用while循环。while True:如果您的意图是有一个无限循环,那么如果您使用而不是使用递归,其他人会更容易以这种方式阅读它。

于 2013-05-02T21:55:42.010 回答
0

当我尝试以 1000 步左右为规范化变量编写代码时遇到了类似的问题(看看我的问题)......当我使用递归函数时,我不断收到“递归深度”错误,许多有经验的程序员告诉我应该使用while 循环,因为它使用更少的内存...

于 2014-07-23T10:20:22.090 回答