在一行中调用3个递归? 我对C++编程很陌生,不久前我开始学习递归函数。我的问题是,这能用递归实现吗 u(n)=n*u(n-1)+(n+1)*u(n-2)+n

在一行中调用3个递归? 我对C++编程很陌生,不久前我开始学习递归函数。我的问题是,这能用递归实现吗 u(n)=n*u(n-1)+(n+1)*u(n-2)+n,c++,C++,是的,只要您正确处理基本情况。目前的函数尚未完全定义:您需要明确说明u(0)和u(1)(或任何其他基本情况)的值 请注意,函数本身调用了两次(使用n-1和n-2),而不是问题标题所示的三次 此外,在这种特殊情况下,递归是不必要的,也是次优的:您可以简单地使用两个变量来保存两个最新的数字,然后迭代进行。有关不同方法的讨论,请参阅;函数形式不同,但所有讨论都适用于您的函数。是的,前提是您正确处理基本情况。目前的函数尚未完全定义:您需要明确说明u(0)和u(1)(或任何其他基本情况)的值 请注意,函数

是的,只要您正确处理基本情况。目前的函数尚未完全定义:您需要明确说明
u(0)
u(1)
(或任何其他基本情况)的值

请注意,函数本身调用了两次(使用
n-1
n-2
),而不是问题标题所示的三次


此外,在这种特殊情况下,递归是不必要的,也是次优的:您可以简单地使用两个变量来保存两个最新的数字,然后迭代进行。有关不同方法的讨论,请参阅;函数形式不同,但所有讨论都适用于您的函数。

是的,前提是您正确处理基本情况。目前的函数尚未完全定义:您需要明确说明
u(0)
u(1)
(或任何其他基本情况)的值

请注意,函数本身调用了两次(使用
n-1
n-2
),而不是问题标题所示的三次


此外,在这种特殊情况下,递归是不必要的,也是次优的:您可以简单地使用两个变量来保存两个最新的数字,然后迭代进行。有关不同方法的讨论,请参阅;函数形式不同,但所有的讨论都适用于函数。

是的,可以这样做,但这将具有指数复杂性。一个更好的方法是,在继续进行时,自下而上计算并缓存较低的u值。

是的,可以这样做,但这将具有指数复杂性。一种更好的方法是,在继续进行时,自下而上计算u值并缓存较低的值。

简短回答:是。终点是什么?(递归是如何完成的?)递归函数并不神奇。它们只是在某些(并非所有!)情况下碰巧调用自己的函数。随便打电话给他们。简短回答:是的。终点是什么?(递归是如何完成的?)递归函数并不神奇。它们只是在某些(并非所有!)情况下碰巧调用自己的函数。你想叫他们到哪里就叫到哪里。也许他少了一个
u
:u(n)=n*u(n-1)+u(n+1)*u(n-2)+n@LihO:那将是一个不幸的递归调用。@LihO:如果你看不到Greg评论的原因,如果你的递归同时上下(即
u(n-1)
u(n+1)
)你将进入一个无限循环:你从
N
开始,然后跳到
{N+1,N-1}
,如果你选择第一个,它将递归到
N+1-1
N+1+1
,第一个是
N
,或者是原始的情况,导致无限递归,很可能是堆栈溢出。我理解你的意思,我认为循环解决它会更好。谢谢@DavidRodríguez dribeas:你认为我刚才写的“我知道”是什么意思?也许他少了一个
u
:u(n)=n*u(n-1)+u(n+1)*u(n-2)+n@LihO:那将是一个不幸的递归调用。@LihO:如果你看不到Greg评论的原因,如果你的递归同时上下(即
u(n-1))
u(n+1)
)你将进入一个无限循环:你从
n
开始,然后跳到
{n+1,n-1}
,如果你选择第一个,它将递归到
n+1-1
n+1+1
,第一个是
n
,或者是原始情况,导致无限递归,很可能是堆栈溢出。我理解你的意思,我认为循环解决它会更好。谢谢@DavidRodríguez dribeas:你认为我刚才写的“我知道”是什么意思?