C++ 递推公式

C++ 递推公式,c++,data-structures,recursion,C++,Data Structures,Recursion,首先,是的,它是HW-确实尝试过,但不确定是否有什么东西,如果你能帮助我,我会很高兴:) 我有以下代码: void func(int A[], int start, int n) { int p = n/2; if ( 1 < n ) { func(A, start, p); func(A, start + p, n-p); for (i=0; i<n; i++) cout <<

首先,是的,它是HW-确实尝试过,但不确定是否有什么东西,如果你能帮助我,我会很高兴:)

我有以下代码:

void func(int A[], int start, int n)
{
    int p = n/2;
    if ( 1 < n )
    {
        func(A, start, p);
        func(A, start + p, n-p);
        for (i=0; i<n; i++)
            cout << A[start+i];
    }
}

func(A, 0, n);
void func(int A[],int start,int n)
{
int p=n/2;
if(1对于(i=0;i < p>这不是一个技巧问题,或者是你误读了问题。你有什么强的< <强>一个递归公式。你需要把这个公式从C++转换成更传统的数学符号吗?需要找到一个非递归算法吗?在你的答案中,什么是t?这个术语公式在这里没有真正应用,因为没有。这是一个不会修改给定数组的void函数。所有发生的事情是数组中的一些元素以某种顺序被放到屏幕上

我将从追踪一个例子开始,以了解发生了什么。 假设
A={1,2,3,4}
func(A,0,4)”是:

跟踪函数(A,0,4):
p=2
func(A,0,2)
func(A,2,2)

cout如果我读对了,您希望运行时复杂性的重现性

对于
n>1
,使用参数
floor(n/2)
和参数
n-floor(n/2)
重复出现,然后输出
n
项。因此

T(n) = T(cost of first recursive call) + T(second rec. call) + extra work

你现在应该把它变成适合应用主定理的形式。

它应该做什么?问题是什么?我需要找到递归公式(T(n)=???)不确定如何处理第二个递归调用…使用“逐步示例”怎么样?尝试不同变量的值,并检查每个变量和其中一个变量的结果。一开始,我以为它是从n/2到n/2运行的,所以θ是(1)…但我认为这是错误的…换一种方式,从一个不递归的调用开始。然后看一个递归一次的调用。然后是一个递归两次的调用。到那时,你应该开始理解它了。嗨,丹尼尔,那是对的。所以我得到:t(n/2)+t(n/2)+n???只是不确定第二个rec调用!严格来说,你得到的是
t(floor)(n/2))+T(上限(n/2))+n
。如果你把它捏造成
2*T(n/2)+n
,你应该准备好证明它(不太难,先捏造,然后用结果证明)。
T(n) = T(cost of first recursive call) + T(second rec. call) + extra work