求解递归T(n)= log(T(n-1))+ 1

时间:2016-03-01 08:32:07

标签: function recursion

我试图解决这个递归问题:

var xyz = new xyz().ExternalService();
try  
{
    xyz.GetRelevantData();
}

catch(Exception e)
{
    ...handle the exception
}

我得到了O(1)的回答,但我觉得我错过了什么。

我很乐意得到一些帮助。

提前致谢!

1 个答案:

答案 0 :(得分:2)

对于任何值> = 1.0

,您的递归关系收敛于1.0

你对 O (1)的回答是完全正确的。递归关系以如此简单的方式表达,而不是给出算法,你可能会有点抛出?

让我再试一次。也许,也许我们都有点困惑。我在单通话级别回答;也许你需要整体答案(更有可能,现在我考虑一下)。

首先,让我们打个电话。如果n = 2,那就是恒定时间。如果n> 2 ......这就是我对符号不太熟悉的地方。这是表示单个调用的时间,还是整个递归序列降至n = 2的时间?由于实际考虑,我认为必须进行单一呼叫。这使得我之前的回答不正确。

查看n = 3的调用。这扩展并解决为

T(3) = log(T(2)) + 1
T(3) = log(1) + 1
T(3) = 0 + 1 = 1

感应T(n)= 1,n> = 2.事实证明,即使基本情况-T(2) - 具有1以外的值,只要它是有限的和更多超过1 /(我们用于日志的基数),系列将收敛到1,每次调用将处于恒定时间。

因此,为了解决T(n),我们有n-2个调用,每个调用都是T(1)。这给出了 O(n)的整体复杂性。

这是否更清楚?