在一行中调用3次递归?

时间:2012-02-10 19:55:58

标签: c++

我是C ++编程的新手,不久前我开始学习递归函数。所以我的问题是,这可以通过递归完成吗?

u(n)=n*u(n-1)+(n+1)*u(n-2)+n

2 个答案:

答案 0 :(得分:3)

是的,它可以完成,但是这将具有指数级的复杂性。更好的方法是在继续时计算自下而上并缓存较低的u值。

答案 1 :(得分:0)

是的,只要您正确处理基本案例。现在的功能尚未完全定义:您需要明确说明u(0)u(1)的值(或基本情况可能的其他任何值)。

请注意,该函数会自行调用两次(使用n-1n-2),而不是问题标题的三倍。

此外,在这种特殊情况下,递归是不必要的并且不是最理想的:您可以简单地使用两个变量来保留两个最近的数字,并迭代地继续。有关不同方法的讨论,请参阅ICS 161: Design and Analysis of Algorithms: Fibonacci Numbers;功能形式有所不同,但所有的讨论都适用于你的功能。