创建一个递归函数来计算R=xn*y,带条件

2024-09-27 00:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个函数来计算R=x-N*y,其中x和y是浮点数,N是最大的正整数,因此x>;N*y

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

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

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

我的问题是,我不知道如何编码“y\u increased”,也就是说,如何将N更新为N+1,然后调用florec(x,(N+1)*y)。然后将N+1更新为N+2并调用florec(x,(N+2)*y)等等。你知道吗

目前感觉很困窘,所以任何向前推进的帮助都将不胜感激。你知道吗


Tags: 函数gt编码returnifdef浮点数感觉
3条回答

根据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的情况

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

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

下面是计算R的递归方法:

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

(请注意,它仅适用于正浮动。)

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

相关问题 更多 >

    热门问题