c - 找出递归函数的时间复杂度

标签 c recursion time-complexity

当n1是s1的长度,n2是s2的长度时,为什么这个函数的时间复杂度是O(n1*n2)?

我试图建立一个方程式但失败了。

#include <stdio.h>

int f(char* s1, int i1, char* s2, int i2) {
    if (s2[i2] == '\0')
        return 1;
    if (s1[i1] == '\0')
        return 0;
    if (s1[i1] != s2[i2])
        return f(s1, i1 + 1, s2, 0);
    return f(s1, i1+1, s2, i2+1);
}

void main() {
    printf("%d", f("hello", 0, "he", 0));
}

最佳答案

对于两次尾调用,函数将i1递增1,因此时间复杂度为O(n1)

请注意,此函数未实现 strstr() 的变体,因为它无法找到 f("aab", 0, "ab", 0).

关于c - 找出递归函数的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44931128/

相关文章:

algorithm - 多次运行 O(n log n) 算法的复杂度是多少?

python - 有优化这个算法的想法吗?

c - kernel hashtable.h 哈希表的动态大小

c - 什么是CPUID标准函数01H?

JavaScript - 数组的所有可能组合

python - 为什么我的递归二分搜索函数没有返回任何内容?

search - 二分搜索 - 最坏/平均情况

c - 如何在 C 中的 printf 中写入 .5?

c - 使用指针知道数组的大小

JavaScript:创建嵌套 UL 的递归函数