列印N個數的迴圈演算法和遞迴演算法比較

2021-10-19 07:27:09 字數 546 閱讀 3960

1.迴圈演算法:

1 void printn_1(int n)

2

n可以為任意數量級的整數

2.遞迴演算法:

1 void printn_2(int n)

2 8 }

當n為10^4個數量級的時候程式就會非正常中斷,要計算printn_2(n),因為這個函式裡還有其他的語句,所以要先儲存它的狀態,然後進入下一次遞迴;而在執行printn_2(n -1)時,為了在程式最終返回是能執行它之後的語句,所以要先儲存它的狀態,然後進入下一次呼叫,……,直到執行到printn_2(0)時,函式才直接返回,然後逐級執行之前儲存的狀態中的其他語句,執行完之後釋放記憶體。所以這個遞迴在n非常大時,經過展開後是非常龐大的,需要耗費大量的記憶體空間,當所需的記憶體空間超過堆疊的最大記憶體時,程式就會非正常中斷,從而乙個數也不列印。

假設儲存每個函式的轉態占用c個單位的記憶體空間,那麼執行printn_2(n)就需要c * n個單位的記憶體空間,這個演算法的空間複雜度就是s(n) = c * n;

N個數全排列的非遞迴演算法

n個數全排列的非遞迴演算法 include stdio.h voidswap int a,int b 根據當前的排列p,計算下乙個排列。原則是從1234 4321,若p已經是最後乙個排列,傳回false,否則傳回true。p是乙個n維向量。boolnextpermutation int p,intn...

迴圈列印矩陣(演算法)

列印結果為 1,5,6,8,3,8,3,7,6,1,6,6,2,7,2,8。列印最外圍方法如下 定義乙個動點p curr,curc 初始時curr row1,curc col1,curc遞增 終止條件為curc col2 curr遞增 終止條件為curr row2 curc遞減 終止條件為curc ...

n皇后的遞迴演算法

問題描述 在n n的方格棋盤放置n個皇后,要求每個皇后不同行,不同列 不同左右對角線。問題求解 採用整數陣列q n 存放n皇后問題的求解結果,因為每行只能放乙個皇后,q i 1 i n 的值表示第i個皇后所在的列號,即該皇后放在 i,q i 的位置上。為了簡便,不使用q 0 元素 對於 i,j 位置...