在一行中调用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:你认为我刚才写的“我知道”是什么意思?