创建一个递归函数,用于计算R = x - N * y,条件

时间:2016-10-12 11:51:45

标签: python python-3.x

我希望创建一个用于计算R = x-N * y的函数,其中x和y是浮点数,N是最大的正整数,因此x> 0。 N * y。

该函数应该只接受x和y的输入。

我以前通过循环创建了该函数,但是在尝试将其转换为递归时遇到了麻烦。我的基本想法是:

def florec(x, y):
    if x > y:
        R = x - N * y
        florec(x, y_increased)
    return R

我的问题是我无法弄清楚如何编码" y_increased",这意味着我如何将N更新为N + 1,然后调用florec(x,(N + 1)* Y)。然后将N + 1更新为N + 2并调用florec(x,(N + 2)* y),依此类推。

目前感觉非常困难,所以任何向前推进的帮助都会受到赞赏。

3 个答案:

答案 0 :(得分:2)

这是计算R的递归方式:

def florec(x, y):
    if x > y:
        return florec(x-y, y)
    return x

(注意它只适用于正浮动。)

我不知道这是否解决了你的递归问题。也许这个用例不是最适合说明递归的。

答案 1 :(得分:0)

如果您尝试在每次递增时返回一个值,则可以使用生成器函数:

def florec(x, y):
    N = 30  # not sure what you want N to start with
    while True:
        if x > N * y:
            yield x - N * y
        else:
            break
        N += 1

for i in florec(332.432, 5.32):
    print i

结果:

172.832
167.512
162.192
156.872
151.552
146.232
140.912
135.592
130.272
124.952
119.632
114.312
108.992
103.672
98.352
93.032
87.712
82.392
77.072
71.752
66.432
61.112
55.792
50.472
45.152
39.832
34.512
29.192
23.872
18.552
13.232
7.912
2.592

答案 2 :(得分:0)

根据Jerome的原始评论,您描述的功能是模数的定义。如果你绝对需要使用递归,以下将完成它。

def florec(x, y, N=1):
    R = x - N * y
    if R < y:
        return R
    return florec(x, y, N+1)

>>> florec(16.6, 3.2)
2.20000000000001
>>> 16.6 % 3.2
2.20000000000001

请注意,上述内容仅适用于正x和y,仅适用于x大于y的情况。