遞迴效率與非遞迴效率

2021-06-22 06:37:54 字數 2073 閱讀 1816

題目1384:二維陣列中的查詢
時間限制:1 秒

記憶體限制:32 兆

特殊判題:

提交:10472

解決:2093

題目描述:在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

輸入:輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。

輸入的第二行包括乙個整數t(1<=t<=1000000):代表要查詢的數字。

接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。

輸出:對應每個測試案例,

輸出」yes」代表在二維陣列中找到了數字t。

輸出」no」代表在二維陣列中沒有找到數字t。

int judgenumberinarray(unsigned int **target_array, int row,int column, unsigned int search_num)

else if(search_num > *((unsigned int *)target_array+j))

else

}return 0;

}

int judgenumberinarray(unsigned int **target_array, int row,int column, unsigned int search_num)

else if(search_num > *((unsigned int *)target_array + i*column + j))

else

}return 0;

}

int judgenumberinarray(unsigned int **target_array, int row,int column, unsigned int search_num)

if(search_num == *((unsigned int *)target_array+column-1))

else if(search_num > *((unsigned int *)target_array+column-1))

else

}

規模小時遞迴效率未必低

#include typedef unsigned int u_int32_t;

u_int32_t recursion(u_int32_t n, u_int32_t *result)

int main(int argc,char **argv)

return 1;

}

#include typedef unsigned int u_int32_t;

u_int32_t recursion(u_int32_t n)

int main(int argc,char **argv)

return 1;

}

尾遞迴優化防止溢位,效率未必提公升。(以上**用了if,僅僅測試使用,不滿足題目要求)

#include #include #define max(a,b) ((a)>(b)?(a):(b))

int f(int x)

int main(int argc,char **argv)

上面**在虛擬機器裡面跑了10 分鐘還沒完。。。

附:target_array分配為全域性變數效率劣於一次性分配可能的在棧上分配,劣於根據需要在棧上分配

原因可能是由於區域性性原理。

遞迴呼叫效率問題,遞迴與迴圈比較

1.所謂的遞迴慢到底是什麼原因呢?大家都知道遞迴的實現是通過呼叫函式本身,函式呼叫的時候,每次呼叫時要做位址儲存,引數傳遞等,這是通過乙個遞迴工作棧實現的。具體是每次呼叫函式本身要儲存的內容包括 區域性變數 形參 呼叫函式位址 返回值。那麼,如果遞迴呼叫n次,就要分配n 區域性變數 n 形參 n 呼...

漫談遞迴 遞迴的效率問題

遞迴在解決某些問題的時候使得我們思考的方式得以簡化,也更加精煉,容易閱讀。那麼既然遞迴有這麼多的優點,我們是不是什麼問題都要用遞迴來解決呢?難道遞迴就沒有缺點嗎?今天我們就來討論一下遞迴的不足之處。談到遞迴就不得不面對它的效率問題。為什麼遞迴是低效的 還是拿斐波那契 fibonacci 數列來做例子...

優化遞迴的效率

函式遞迴呼叫是很常見的做法,但是它往往是低效的,本文 優化遞迴效率的思路。1.尾遞迴轉換成迭代 尾遞迴是一種簡單的遞迴,它可以用迭代來代替 比如 求階乘函式的遞迴表達 f int n 可以轉換成完全等價的迴圈迭代 f int n 尾遞迴是最簡單的情形,好的編譯器甚至可以自動的識別尾遞迴並把它轉換成迴...