- 31
- 0
我写的
def recursive_function_cache(func):
cache = dict()
def wrapper(*args, **kwargs):
parameters = (tuple.__repr__(args), dict.__repr__(kwargs))
if parameters not in cache:
cache.update({parameters : func(*args, **kwargs)})
return cache.__getitem__(parameters) #返回缓存的函数值
return wrapper
def Fibonacci_sequence_06 (n: int) -> int: #参数n是表示求第n项Fibonacci数
assert isinstance(n, int), 'n is an error of non-integer type.'
@recursive_function_cache
#@profile
def Calculate_Fibonacci_sequence (n: int) -> int:
'返回单项的二分递归解法'
if n>=3:
if (n & 1) == 0: #当n为偶数项
one_half_fib_n = Calculate_Fibonacci_sequence(n >> 1)
one_half_fib_n_minus_one = Calculate_Fibonacci_sequence((n >> 1) - 1)
return ((one_half_fib_n_minus_one << 1) + one_half_fib_n) * one_half_fib_n
else: #当n为奇数项
return Calculate_Fibonacci_sequence(n >> 1) ** 2 + Calculate_Fibonacci_sequence((n >> 1) + 1) ** 2
elif n in (1, 2):
return 1
elif n==0:
return 0
if n>=0:
return Calculate_Fibonacci_sequence(n)
else:
return None
Fibonacci_sequence_06(10000000)
算第1千万项用了3秒,耗时是矩阵法的100倍
我看时间复杂度是log(n)的。查看是递归调用了59次
可怎么大数时候跟矩阵法实测时间差那么多
什么地方隐藏着高复杂度
1
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
心脏、已满丨住着如来 普通会员 1楼
Py算fib二分递归解的时间复杂度是O(2^n)。这是因为每次递归调用都会产生两个新的递归调用,所以总的函数调用次数是n次,每次函数调用的时间复杂度是O(1)。因此,总的函数调用时间复杂度是O(2^n)。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

