簡體   English   中英

遞歸公式

[英]Recursive Formula

首先,是的,這是硬件-確實嘗試過,但是不確定如果您願意幫助我,那么病得很高興:)

我有以下代碼:

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);

我需要給此代碼一個可追溯的公式。 我所做的是-第一次遞歸調用是T(n / 2)。 第二-這是問題! 真的與加'p'相混淆...也是T(n / 2)嗎? 三-for在theta(n)上運行,外部遞歸調用為T(n)...

您能幫助我得出最終的公式嗎?

謝謝

如果我沒看錯的話,您希望重復運行時的復雜性。

對於n > 1 ,使用參數floor(n/2)和參數n-floor(n/2) ,然后輸出n項目。 因此,你有

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

您現在應該將其轉換為適合應用主定理的形式。

這是一個技巧性問題,或者您誤讀了該問題。 您擁有的遞歸公式。 您是否需要將此公式從C ++切換到更傳統的數學符號? 是否需要找到非遞歸算法? 在回答問題時,T是什么? 公式一詞在這里並不真正適用,因為不會計算任何內容。 這是一個空函數,永遠不會修改給定的數組。 發生的所有事情都是將數組中的元素以某種順序放在屏幕上。

我將從跟蹤示例開始以了解發生了什么。 假設A = {1,2,3,4}那么'func(A,0,4)'是:

tracing func(A,0,4) :
p = 2
func(A,0,2)
func(A,2,2)
cout  << 1 2 3 4

tracing func(A,0,2) :
p = 1 //start=0; n=2
func(A,0,1)
func(A,1,1)
cout << 1 2

tracing func(A,2,2) :
p = 1 //start=2; n=2
func(A,2,1)
func(A,3,1)
cout << 3 4

tracing func(A,2,1) :
p = 0 //start=0; n=1
func(A,0,0)
func(A,0,1)
cout << 1

tracing func(A,3,1) :
p = 0 //start=3; n=1
func(A,3,0)
func(A,3,1)
cout << 3

tracing func(A,2,1) :
p = 0 //start=0; n=1
func(A,0,0)
func(A,0,1)
cout << 1

此時,我將停止操作,因為這是您的作業問題。 您可以從這里完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM