忘川睡着了zZ 2023-03-09 21:51 采纳率: 66.7%
浏览 8
已结题

这个递归函数为什么是O(2^rest)的啊,它构成了一颗树,而时间复杂度怎么成了树底?


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);
}
  • 写回答

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)。
    • 因此,虽然这个函数形成了一棵树形结构,但是时间复杂度并不是树底的复杂度,而是树的节点数乘以每个节点的时间复杂度。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 已采纳回答 3月9日
  • 创建了问题 3月9日

悬赏问题

  • ¥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 公交车和无人机协同运输