乙個遞迴函式的分析

2021-06-27 07:54:18 字數 1536 閱讀 1556

#include

#include

void pp(char *, int);

char str="abc";

int main()

void pp(char *s, int k)

else

}}

pp( str , 0 )→print當前的str

pp( str , 1)→→pp( str , 0 )→print當前的str→→結束pp呼叫

pp( str , 2)→→pp( str , 1)→→pp( str , 0 )→print當前的str→→結束pp( str , 1)呼叫→→i--→s[1]與s[0]交換→pp( str , 1)→→pp( str , 0 )→print當前的str,此str的前兩位發生了交換→→結束pp( str , 1)呼叫→s[1]與s[0]交換,str還原→→結束pp呼叫

pp( str , 3)→→

pp( str , 2)→→pp( str , 1)→→pp( str , 0 )→print當前的str→→結束pp( str , 1)呼叫→→i--→s[1]與s[0]交換→pp( str , 1)→→pp( str , 0 )→print當前的str,此str的前兩位發生了交換→→結束pp( str , 1)呼叫→s[1]與s[0]交換,str還原→→結束pp( str , 2)呼叫

→→s[2]和s[1]交換→

pp( str , 2)→→pp( str , 1)→→pp( str , 0 )→print當前的str,此str後兩位發生了交換→→結束pp( str , 1)呼叫→→i--→s[1]與s[0]交換→pp( str , 1)→→pp( str , 0 )→print當前的str,此str在後兩位交換的基礎上前兩位發生了交換→→結束pp( str , 1)呼叫→s[1]與s[0]交換,str還原為只交換了後兩位→→結束pp( str , 2)呼叫

→s[2]與s[1]交換,str還原→→s[2]與s[0]交換→

pp( str , 2)→→pp( str , 1)→→pp( str , 0 )→print當前的str,此str的首位和末位發生了交換→→結束pp( str , 1)呼叫→→i--→s[1]與s[0]交換→pp( str , 1)→→pp( str , 0 )→print當前的str,此str在首末位交換的基礎上前兩位發生了交換→→結束pp( str , 1)呼叫→s[1]與s[0]交換,str還原為首末位交換→→結束pp( str , 2)呼叫

→s[2]與s[0]交換,str還原→結束pp呼叫

該遞迴函式的作用就是列印出str的所有排列形式

乙個簡單的lisp遞迴函式

defun mystery x y if null y nil if eql car y x 0 let z mystery x cdr y and z z 1 如果我們 mystery 6 019365 的話,就返回4。這個函式就是接受乙個實參和乙個列表,返回列表中第乙個和實參相等的元素前面有幾個...

乙個遞迴演算法

要求實現1,1,2,3,5,8,13,21,這樣乙個序列。分析一下輸出結果 發現後乙個數字是前2個數字的和。遞迴演算法如下 public static int recursion int i if i 0 return 0 else if i 0 i 2 return 1 else return r...

乙個遞迴問題

created by baicai on 14 5 10.遞迴問題 遞迴中兩個重要的點 1.遞迴公式 2.終止條件 函式的區域性變數存在棧中,可能會棧溢位,所以可以考慮使用全域性陣列,或者動態分配陣列 遊戲問題 類似迷宮求解,自相似性表現在每走一步的探測方式相同,可以用遞迴方法求解,通過列舉出所有從...