遞迴函式變數除錯 雜湊,靜態變數,遞迴函式,序列化

2021-10-07 23:31:44 字數 2144 閱讀 2728

遞迴函式變數除錯

此**段提供了可應用於大多數程式的程式設計技術的幾個示例。

**本身會生成由隨機數組成的字串列表。 字串中不會重複任何數字,字串列表中也不會重複任何字串。 緊隨該**之後的是對上述程式設計技術如何用於實現這些要求的簡要討論。

use warnings;

use strict;

my $length = 7; # the amount of numbers per string

my $max = 1000; # the number of strings

my @strings; # array to store the strings

for (1..$max) 

print "$_\n" for @strings;

= 1; # store the first number in the hash

for (2..$length) ; # redo the loop if the number already exists

$local_cache = 1; # store the number in the hash

}rand_nums($length) if exists $cache; # redo the function if the key already exists

$cache=1; # store the new key in the hash (%cache)

return $serial;}}

每當您認為perl獨特時,總是會使用雜湊。

這是因為雜湊鍵必須唯一。

我使用了兩個雜湊值,乙個用於跟蹤每個數字字串(%local_cache),以確保任何乙個字串中都沒有重複的數字,另乙個用於確保所有字串都是唯一的(%cache)。

%cache被包裝在函式(rand_nums)的塊{}中,以建立完善的c靜態變數版本。 在塊中用「 my」宣告它可以使其在詞法上作用於函式,但對其餘**/檔案隱藏。 由於上面的**片段沒有執行任何其他操作,因此這並不是必需的,而是使用perl建立靜態變數的示例。 perl 5.10還具有一項新功能,可讓您建立稱為

狀態 。

在函式內部將%local_cache宣告為「 my」,因為我們希望每次呼叫該函式時都宣告乙個新的雜湊。 這樣可以確保每個數字字串都沒有重複的值。 %cache確保沒有重複的數字字串。

$ length和$ max可以很容易地用於接受指令碼的一些輸入,從而使這些變數在每次執行指令碼時都是動態的

在rand_nums()函式內部,您可以看到對該函式的呼叫:

rand_nums($ length)如果存在$ cache ;這只是告訴perl如果該字串已經存在,則再次執行該函式。 該函式再次執行,生成另乙個數字字串,並再次檢查它是否已經存在。 這是遞迴perl函式的簡單示例。 如果數字字串尚不存在,則**將繼續執行,並最終返回乙個字串,以將其新增回陣列@strings中。

使用遞迴函式時要記住的重要一點是,不要引入可能導致無限(或深度)遞迴的條件。 如果您的perl指令碼**現這種情況,「警告」實用程式將警告您。 在上面的**中,如果將$ length設定為乙個較小的數字,例如3,則可以自己看到會發生什麼。

我在一開始提到序列化。 序列化是將任意字串連線在一起組成乙個字串。 $ serial將是序列化的字串,它是隨機數的連線列表。 它從這一行開始:

我的$ serial = int(rand(49))+ 1;#獲取序列化字串的第乙個數字通過使用串聯運算子和賦值運算子將字串序列化:

$ serial。=「」-$ num「;我們最終得到乙個像這樣的字串:

3-22-45-9-11-33-48該字串用作雜湊鍵,以確保最終列表中沒有重複的字串。 我們不加入%local_cache的鍵來生成序列化字串的原因是,雖然雜湊沒有確定的順序,但它們沒有隨機的順序。 通過將雜湊鍵連線在一起而建立的結果隨機數字串將不再是隨機的,而是傾向於數字出現在字串中某些位置的概率。 即使不會重複兩個字串,您最終也會在相同位置反覆出現具有相同數字的字串。

**中使用的編譯指示和perl內建函式的列表:

perl功能:語法:

翻譯自:

遞迴函式變數除錯

遞迴函式中清空靜態變數

函式中如果定義了靜態變數,每次對函式的呼叫返回的資料都會儲存,不會清空,所以使用下面的方法可以使函式每次呼叫前的資料都是空的狀態。函式中清空靜態變數 i 第一次為空,會清空靜態變數,下次呼叫時已經 故不會在清空 function array multi2single array,i 0 foreac...

變數 靜態變數

變數 全域性變數 外部變數 在函式外部定義,以及被本程式所有物件或函式引用。區域性變數 內部變數 由某個函式或物件建立,只能被內部引用,而無法被其他物件或函式引用。特點 該變數在全域性資料區分配記憶體 未經初始化的靜態全域性變數會被程式自動初始化為0 在函式體內宣告的自動變數的值是隨機的,除非它被顯...

靜態變數和非靜態變數

class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...