1. 程式人生 > >遞迴呼叫與時間複雜度的學習總結

遞迴呼叫與時間複雜度的學習總結

今天主要學習了兩個知識點。分別是遞迴呼叫和時間複雜度。重點是時間複雜度,比較複雜奮鬥

1. 遞迴函式

1.1題目1:

一共5個人,一個比一個大2歲,最後一個10歲,問第一個多少歲? 首先用迴圈形式來寫函式,如下:
int Age1(int n)//O(n)
{
	int tmp = 10;
	for(int i=1;i<n;i++)
	{
		tmp += 2;
	}
	return tmp;
}

而用遞迴函式如下:

int Age(int n)   //O(n)
{
	int tmp;
	if(n == 1)//邊界條件
	{
		tmp = 10;
	}
	else
	{
		tmp = Age(n-1) + 2;
	}
	return tmp;
}

但是遞迴函式的時間複雜度是比迴圈大的。

2.時間複雜度

如下一段程式:
bool Fun(int n)
{
     int i=2;
    while((n%i)!=0 && i*1.0<sqrt(n))
    {
          i++;
    }
    if(i*1.0>sqrt(n))
       return true;
    else
       return false;
}
現在問:1.這段程式實現什麼功能?  2.時間複雜度是多少? 答:1.判斷一個數是否為素數。         2.時間複雜度為sqrt(n)。