九度OJ 1073 楊輝三角形

2021-07-02 06:47:31 字數 2135 閱讀 2117

題目描述:輸入n值,使用遞迴函式,求楊輝三角形中各個位置上的值。

輸入:乙個大於等於2的整型數n

輸出:題目可能有多組不同的測試資料,對於每組輸入資料,

按題目的要求輸出相應輸入n的楊輝三角形。

樣例輸入:

6
樣例輸出:

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

#include#include/*

*非遞迴方式

*//*int main(void)

} for (int i = 0; i < num - 1; i++)

printf("\n");

} }return 0;

}*/typedef struct prelinepre_line;

pre_line output(int,pre_line);

int main(void)

return 0;

}pre_line output(int n,pre_line li)

else

printf("%d", li_new.a[i][0]);

for (int j = 1; j <= i + 1; j++)

printf("\n");

return li_new;

}}

這個題目,如果不用遞迴做,明顯**量少得多而且思路也很清晰。

就是先定義乙個二維陣列,然後進行問題求解。順便說一句,資料結構真的很重要,因為我一開始想的還是用一維陣列來做,之後有點招架不住。

因為最近剛好又回顧了一遍有關遞迴的演算法,於是又尋(zuo)思(si)使用遞迴的方法來求解問題。

面前首先遇到的難題就是怎麼把陣列在兩個函式之間傳遞。因為除了base case 之外的其他每一行列印都必須要前一行的資料。所以我在遞迴函式裡必然要返回前一行的資料。

之後搜尋了一下這個問題,看到可以用結構體的方法傳遞多維陣列。

於是,入坑。因為真的是還不熟悉結構體的用法。

於是,一開始是在傳遞結構體的指標。結構體宣告如下:

typedef struct preline*pre_line;
看到和正確**的不同了嗎?結果在編譯時都沒有通過,說是指標li使用前沒有初始化。

這時才恍然大悟,依昔記得當時c語言老師每次定義結構體,使用時不忘先malloc一下。

話不多說,我馬上又去初始化了一下。

可是執行時,第一行正確列印「1 1」,第二行中間那個值卻十分怪異。

一步步除錯發現,每次遞迴呼叫函式完返回後,即使賦值給了li_new,可是li_new裡的資料全都是「新鮮"的-------應該說是未初始化的。

這才恍然大悟--------因為傳遞的是指標變數,當output()每次執行完成之後,裡面的li_new會自動銷毀,所以即使外層li_new得到了上一層的位址,指向的地區也已經沒有了已經賦值的陣列。

跳出大坑

既然傳遞結構體指標行不通,那麼直接傳遞結構體是否可行呢?  結果是肯定的。

函式返回後會將output()函式中li_new的記憶體按位拷貝給外層的li_new;所以li_new裡面的陣列值也會被完全保留下來。在遞迴中使用結構體和平時使用時還是有很大區別的。

馬不停蹄地改完**,一步步執行,終於發現列印第二行時,上一層呼叫的output()傳遞過來的陣列資訊都儲存下來了。

crn,你一定要加油!

看到有人的迭代方法和我的不太一樣,貼過來,學習一下。 來自 

#include#includeint a[100][100];

int fun(int n,int m)

}int main()

puts("");}}

return 0;

}

楊輝三角形

關於楊輝三角的論述 問題描述 楊輝三角形又稱pascal 三角形,它的第 i 1行是 a b i 的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 11 2 1 1 3 3 1 給出n,輸出它的前n行。輸入格式 輸入包含乙個數n。輸出格式...

楊輝三角形

基礎練習 楊輝三角形 時間限制 1.0s 記憶體限制 256.0mb 錦囊1 錦囊2 錦囊3 問題描述 楊輝三角形又稱pascal三角形,它的第i 1行是 a b i 的展開式的係數。它的乙個重要性質是 三角形中的每個數字等於它兩肩上的數字相加。下面給出了楊輝三角形的前4行 1 11 2 1 1 3...

楊輝三角形

在螢幕上顯示楊輝三角形 問題分析與演算法設計 楊輝三角形中的數,正是 x y 的n次方冪展開式中各項的係數。從楊輝三角形的特點出發,可以總結出 1 第n行有n 1個值 設起始行為第0行 2 對於第n行的第j個值 n 2 當 j 1 或 j n 1 時 其值為1 當 j!1 且 j!n 1時 其值為第...