user504877 Asked:2022-08-25 23:32:50 +0000 UTC2022-08-25 23:32:50 +0000 UTC 2022-08-25 23:32:50 +0000 UTC 关于函数的问题 772 请帮忙完成任务。关于函数的问题。我的代码有错误,显然我误解了任务: n = int(input()) m = n def f(n): if n == 0: print(0) elif 2 > n > 0: print(1) if n > 1: n %= 2 if n == 1: print((m+1)//2) else: print(m//2) f(n) python 2 个回答 Voted Best Answer MBo 2022-08-26T00:04:23Z2022-08-26T00:04:23Z 好吧,根据书面定义: def f(n): if n < 2: return n if n%2: return f(n//2) + f(1 + n//2) else: return f(n//2) n = int(input()) print(f(n)) 这可以考虑很长时间,因为这种递归组织会导致重复计算相同的值。(对于 n<1000 没关系) 但是可以将它们写入列表并在需要时从那里取出。您可以从头开始,依次计算 f(2)、f(3) 等直到所需的值。 TigerTV.ru 2022-08-26T22:01:57Z2022-08-26T22:01:57Z memoization的另一种选择: def memo(f): ret = {} def helper(i): if i not in ret: ret[i] = f(i) return ret[i] return helper @memo def f(n): if n < 2: return n return f(n // 2) + (n % 2) * f(n // 2 + n % 2) n = int(input()) print(f(n))
好吧,根据书面定义:
这可以考虑很长时间,因为这种递归组织会导致重复计算相同的值。(对于 n<1000 没关系)
但是可以将它们写入列表并在需要时从那里取出。您可以从头开始,依次计算 f(2)、f(3) 等直到所需的值。
memoization的另一种选择: