int f(int N,int s ,int rest,int cur)
{
if(rest==0)
{
return cur==s?1:0;
}
if(cur==1)
{
return f(N,s,rest-1,2);
}
if(cur==N)
{
return f(N,s,rest-1,N-1);
}
return f(N,s,rest-1,cur-1)+f(N,s,rest-1,cur+1);
}
这个递归函数为什么是O(2^rest)的啊,它构成了一颗树,而时间复杂度怎么成了树底?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 「已注销」 2023-03-09 22:17关注
“Devil组”引证GPT后的撰写:
- 这个递归函数的时间复杂度确实是O(2^rest),其中rest是递归的深度。为了更好地理解这个时间复杂度,可以考虑函数调用形成的树形结构。
- 每次递归调用会生成两个子问题,因此可以将递归调用形成的树形结构看作是一棵满二叉树,其高度为rest,树的节点数为2^rest-1。这是因为树的高度是rest,每个节点都有两个子节点,所以树的节点数为2^rest-1。
- 在这个函数中,每个节点都需要执行一次递归调用,因此函数的总时间复杂度就是所有节点的调用时间的总和。由于每个节点都需要O(1)的时间来执行,因此总时间复杂度就是O(2^rest)。
- 因此,虽然这个函数形成了一棵树形结构,但是时间复杂度并不是树底的复杂度,而是树的节点数乘以每个节点的时间复杂度。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
- ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
- ¥20 神经网络Sequential name=sequential, built=False
- ¥16 Qphython 用xlrd读取excel报错
- ¥15 单片机学习顺序问题!!
- ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
- ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
- ¥15 相敏解调 matlab
- ¥15 求lingo代码和思路
- ¥15 公交车和无人机协同运输