演算法學習之旅,中級篇(5) 遞迴之楊輝三角

2021-08-07 16:45:31 字數 667 閱讀 9117

介紹

楊輝三角的最本質特徵是,它的兩條斜邊都是由數字1組成的,而其餘的數則是等於它肩上的兩個數之和。

分析

每行的第乙個 和最後乙個元素的值為1,設第x行的第y個元素為c(x,y),遞迴結束條件為x等於y或y等於1,否則c(x,y)=c(x-1,y)+c(x-1,y-1)。

**

#include

#include

#include

//遞迴函式

int c(int x,int y)

//非遞迴函式

void cc(int n)

for(i=2;ifor(j=1;j1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=1;i<=n;i++)

printf("\n");

}}int main()

system("pause");

return

0;}

遇到的問題

最開始我是想直接用n*n陣列儲存楊輝三角的兩條為1的斜邊,其餘為0,然後遍歷用楊輝三角的特性來加數,最後發現有個bug,就是數1會被重置,是行不通的。

演算法學習之旅,中級篇(2) 插入排序

介紹 每次從無序表中取出第乙個元素,把它插入到有序表中的合適位置。分析 第一趟 比較前兩個數的大小,然後把其中最小的插入排在第乙個位置。第二趟 比較第三個數與前兩個數的大小,大的數後移,知道遇到小的,便插入到較小數的後面,數不再移動。依次進行,進行了n 1躺後,就完成了整個排序過程。include ...

演算法學習 遞迴之漢諾塔

漢諾塔問題 如下圖所示,從左到右有a b c三根柱子,其中a柱子上面有從小疊到大的n個圓盤,現要求將a柱子上的圓盤移到c柱子上去,期間只有乙個原則 一次只能移到乙個盤子且 子不能在小盤子上面,求移動的步驟和移動的次數 1個盤的時候,只需要移動1次即可達成目標,g 1 1 步驟一 2個盤的時候,需要移...

演算法學習之旅,初級篇(30) 刪除鍊錶內節點

介紹 給定單向鍊錶的頭指標和第幾個節點,定義乙個函式在o 1 時間刪除該節點。分析 先遍歷找到節點指標,然後進行刪除 include include typedef struct listnode listnode void deletenode listnode pnode,listnode pd...