斐波那契的时间复杂性

问题描述

 def f6 ( n : nat ?) : 
 for x in range ( n ) :
 print ("*")
 for i in range ( n / 10) :
    for k in range (10) :
       for j in range ( n / 10) :
          print ("-") 
  1. 对于第一个循环for x in range(n),它将为O(n),而后三个循环将为O(N / 10 * 10 * N / 10)-> O(N ^ 2/10 ),因此总复杂度为O(N + N ^ 2/10)-> O(N + N ^ 2)

    def sum( start : nat ?,end : nat ?) :
        if start > end : return 0
        if start == end : return end
        return ( start +
        sum ( start + 1,end ) )
    
  2. 因为没有循环,并且如果语句在恒定时间内完成,则复杂度为O(1)

    def Fibonacci1 ( n : nat ?) :
        let ans = 0
        let pre_ans1 = 0
        let pre_ans2 = 1
        for i in range (1,n + 1) :
            ans = pre_ans1 + pre_ans2
            pre_ans2 = pre_ans1
            pre_ans1 = ans
        return ans
    
  3. 此块中的第一个循环将增加O(N)的复杂度,并且由于没有其他循环,因此总复杂度将为O(N)

    def Fibonacci2 ( n : nat ?) :
        if n <= 2: return 1
        return ( Fibonacci2 ( n - 1) +
        Fibonacci2 ( n - 2) )
    
  4. 我不确定这一点,因为当方法返回时,N实际上是线性增加的。但是,由于返回时我们递归调用了该方法,我们是否以指数方式返回?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)