見解 能用其他方式解決的不要用遞迴

2021-10-09 01:31:19 字數 1261 閱讀 8074

今天在刷leetcode的時候,有道題需要編碼拼接字串的時候,我用來遞迴的方式,結果發現耗時和空間占用很恐怖,後面用迴圈實現,頓時快了n倍。。

下面是**:

// 遞迴實現拼接字串

string hebing

(vector strs,

int left,

int right)

return

hebing

(strs, left,

(left + right)/2

)+hebing

(strs,

(left + right)/2

+1, right);}

string encode

(vector

& strs)

return

hebing

(strs,

0, strs.

size()

-1);

}// 迴圈實現:

string hebing

(vector strs,

int left,

int right)

return s;

} string encode

(vector

& strs)

return

hebing

(strs,

0, strs.

size()

-1);

}

我原本想的是,用遞迴可以分段拼接,不用一直累加,可以減少部分記憶體占用.。

但是後面才發現,遞迴才是真正的占用記憶體,因為每呼叫一次,都會多乙個棧的記憶體空間,

而且因為要返回數值,還可能對資料進行賦值,因此耗時更加恐怖。

遞迴是一種很方便的**實現方式,但是會占用大量的空間,對返回值進行操作時,也會額外消耗時間;個人認為除了特定的某些問題,必須二叉樹需要用到遞迴,其他問題可以不用遞迴的話盡量不用為好;就比如動態規劃的最終方法都是從遞迴回歸 到迴圈

Linq的其他方面

前面的幾篇文章簡述了linq的基本概念 linq的概念解析 linq 概述 語法及例項 深入理解linq的參考例子 實際使用中,linq的其他方面做個簡述,以備使用中參考 微軟的框架包含的 linq to object linq to xml linq to sql codeplex.com社群有很...

陣列的其他方法

reverse 反 翻轉陣列 var arr i love you arr.reverse console.log arr sort 對陣列進行排序 var arr 1,5,9,3,7,4,6,2,8 arr.sort arr.sort function a,b console.log arr co...

求質數的其他方法

如果要求輸出1 n之間的所有質數,需要注意如下幾個方面 1 2是質數,單獨輸出 2 只需測試奇數是否是質數 3 如何判斷某個數x是否是質數,有如下幾種方法 i.測試x是否能被3 x 2的數整除,若沒有能整除的,則為質數,否則不是質數 ii.測試x是否能被3 sqrt x 之間的數整除,若沒有能整除的...