返回递增函数的最小整数

Returning the smallest integer of an increasing function

Write a function lowest_integer() which takes 2 input arguments:

  • a function f representing an increasing function (),
  • a number fmin,

and returns an integer nmin such that >0 is the smallest integer that satisfies ()>.

To test the function we use code like this where we define f(n) then print(lowest_integer(f, fmin)) and get the expected output:

def f(n):
    return 2*n
print(lowest_integer(f, 10))
## 6

def f(n):
    return n**2 + 6*n - 3
print(lowest_integer(f, 500))
## 20

我对代码的尝试:

def lowest_integer(f, fmin):
    f = fmin
    nmin = n + 1
    return nmin

我无法弄清楚如何在 lowest_integer() 函数

中定义函数 f(n)

你可以这样做:

def lowest_integer(f, fmin):
    nmin=1
    while f(nmin)<=fmin :
        nmin += 1
    return nmin 

您从 nmin = 1 开始,然后在 nmin 上加 1,而 f(nmin)<=fmin。为此,您可以使用 while 循环。

通过执行 f(nmin),您可以调用函数 f 并计算条目 nmin 的值。

def f(n):
    return 2*n
def lowest_integer(f, fmin):
    for findmin in range(fmin):
        if f(findmin) > fmin:
            return findmin
    return -1
print(lowest_integer(f, 10))

您可以遍历从 1 开始的整数,直到找到满足条件的整数,在这种情况下,return it:

def lowest_integer(f, fmin):
    nmin = 1
    while True:
        if f(nmin) > fmin:
            return nmin
        nmin += 1

def f(n):
    return 2*n
print(lowest_integer(f, 10))

def f(n):
    return n**2 + 6*n - 3
print(lowest_integer(f, 500))

输出:

6
20

这种方法当然是一种幼稚的方法,如果函数 f 很慢并且 fmin 很大,这种方法会很慢,但总的来说效果很好。

一种更快的方法是使用像 sympy 之类的库,这些库具有使用适合此类问题的更复杂方法和技术的函数。