記錄乙個遞迴反轉字串的過程

2021-10-01 03:01:49 字數 1487 閱讀 8727

(原文:

遞迴是一種解決問題的有效方法,在遞迴過程中,函式將自身作為子例程呼叫

你可能想知道如何實現呼叫自身的函式。訣竅在於,每當遞迴函式呼叫自身時,它都會將給定的問題拆解為子問題。遞迴呼叫繼續進行,直到到子問題無需進一步遞迴就可以解決的地步。

為了確保遞迴函式不會導致無限迴圈,它應具有以下屬性:

乙個簡單的基本案例(basic case)(或一些案例) —— 能夠不使用遞迴來產生答案的終止方案。

一組規則,也稱作遞推關係(recurrence relation),可將所有其他情況拆分到基本案例。

注意,函式可能會有多個位置進行自我呼叫。

讓我們從乙個簡單的程式設計問題開始:

以相反的順序列印字串。

你可以使用迭代的辦法輕而易舉地解決這個問題,即從字串的最後乙個字元開始遍歷字串。但是如何遞迴地解決它呢?

首先,我們可以將所需的函式定義為printreverse(str[0...n-1]),其中str[0]表示字串中的第乙個字元。然後我們可以分兩步完成給定的任務:

printreverse(str[1...n-1]):以相反的順序列印子字串str[1...n-1]

print(str[0]):列印字串中的第乙個字元。

請注意,我們在第一步中呼叫函式本身,根據定義,它使函式遞迴。

下面給出了**片段:

private static void printreverse(char  str) 

private static void helper(int index, char str)

helper(index + 1, str);

system.out.print(str[index]);

}

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列char的形式給出。

不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 o(1) 的額外空間解決這一問題。

你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元:

我的解決方式: 不代表 最好的,只是做出來了而已。

class solution 

public void areverse(char s ,int index)

areverse(s,index+1);

if (index >= s.length / 2) }}

當時結論是:

所以 應該還可以進一步優化。

反轉字串 遞迴

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。輸入 h e l l o 輸出 o l l e h cl...

由乙個翻轉字串程式看遞迴

大夥都知道遞迴就是乙個函式自己呼叫自己,可是對於遞迴的過程我總是很迷惑。今天正好看到乙個程式,就拿來仔細分析分析。includevoid reverse const char const sptr 將字串反著輸出 else int main void 這是乙個讓我們輸入字串,再對字串翻轉輸出的程式。...

遞迴翻轉乙個字串

編寫乙個函式reverse string char string 遞迴實現 實現 將引數字串中的字元反向排列。要求 不能使用c函式庫中 的字串操作函式。解法一 include include int my strlen char arr return count void reverse strin...