以下代码的递归关系是什么:

问题描述

代码如下:

static void fun1(int n)  
{  
   int i = 0;    
   if (n > 1)  
     fun1(n - 1);  
   for (i = 0; i < n; i++)  
     System.out.print(" * ");  
}

我的答案是:

T(n) = { n + 2          : if n <= 1
       { T(n-1) + n + 2 : if n > 1

基本情况包含一个赋值和一个比较(均在恒定时间内)以及以线性时间运行的for循环。

递归情况与基本情况以及递归调用T(n-1)相同。

这就是为什么我认为我是正确的,但是由于没有这个问题的答案,所以请多多包涵。

解决方法

您的答案是正确的,但是可以用更通用的方式编写,就像这样:

T(n) = T(n-1) + n + const,if n > 1
T(n) = n + const,if n <= 1

在这里,const通常选择值1,以简化计算,因为这不会影响时间复杂度。