我是C ++编程的新手,不久前我开始学习递归函数。所以我的问题是,这可以通过递归完成吗?
u(n)=n*u(n-1)+(n+1)*u(n-2)+n
答案 0 :(得分:3)
是的,它可以完成,但是这将具有指数级的复杂性。更好的方法是在继续时计算自下而上并缓存较低的u值。
答案 1 :(得分:0)
是的,只要您正确处理基本案例。现在的功能尚未完全定义:您需要明确说明u(0)
和u(1)
的值(或基本情况可能的其他任何值)。
请注意,该函数会自行调用两次(使用n-1
和n-2
),而不是问题标题的三倍。
此外,在这种特殊情况下,递归是不必要的并且不是最理想的:您可以简单地使用两个变量来保留两个最近的数字,并迭代地继续。有关不同方法的讨论,请参阅ICS 161: Design and Analysis of Algorithms: Fibonacci Numbers;功能形式有所不同,但所有的讨论都适用于你的功能。