日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用非数组的方法输出杨辉三角

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用非数组的方法输出杨辉三角 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家知道利用數組數組的方法輸出楊輝三角是一件比較容易的事情,在許多的教材上都能夠找到,而且計算速度比較快,但是有個缺點就是當輸出的階數比較大的時候,需要占用較多的存儲空間。 下面我嘗試用利用非數組的方法輸出楊輝三角

1.? 利用公式

學了高中數學我們就知道有公式(a+b)n =C0n a0bn+…+ Ckn akbn-k…+ Cnn anb0

楊輝三角的每一個元素都可以由公式計算出來Ckn akbn-k,有了這個公式我們就可以很快寫出程序來。

?

/***************************************************

?*????? 利用公式輸出楊輝三角

?*????? 編程:zheng??????? 2004.10.27

?*????? 程序在BCB6.0下編譯通過

?***************************************************/

#include "stdio.h"

?

static long factorial(long n)

{//n的階乘

?????? return n==0||n==1?1:n*factorial(n-1);

}//factorial

?

static long getelem(long n,long k)

{//利用公式計算楊輝三角的第row行,col列的元素

???? return factorial(n)/(factorial(n-k)*factorial(k));

}//getelem

?

void output(long n)

{//輸出楊輝三角,n為楊輝三角的階數

?????? int row,col;

?????? for(row=0;row<=n;row++)

?????? {

????????????? for(col=0;col<=row;col++)

???????????????????? printf(" %5ld",getelem(row,col));

????????????? printf("/n");

?????? }//for

}//output

?

2.利用遞歸

觀察下面的楊輝三角(你也可以用上面的性質,通過數學方法推導出來)

???? 1

???? 1???? 1

???? 1???? 2???? 1

???? 1???? 3???? 3???? 1

???? 1???? 4???? 6???? 4???? 1

???? 1???? 5??? 10??? 10???? 5???? 1

???? 1???? 6??? 15??? 20??? 15???? 6???? 1

???? 1???? 7??? 21??? 35??? 35??? 21???? 7???? 1

???? 1???? 8??? 28??? 56??? 70??? 56??? 28???? 8???? 1

???? 1???? 9??? 36??? 84?? 126?? 126??? 84??? 36???? 9???? 1

???? 1??? 10??? 45?? 120?? 210?? 252?? 210?? 120??? 45??? 10???? 1

?

我們可以得到下面的性質(其實我們用數組的方法也是用這個性質)

?

1.?????? 邊界上的元素都是1

2.?????? 中間的任何一個元素都是他的上一行的兩個相鄰元素的和

如果我們用f(n,k)表示楊輝三角的第n行的第k個元素,則上邊的性質可以表示成

f(n,k) =1?? ?(k=0或者n=k)

f(n,k) =f(n-1,k-1)+f(n-1,k)

Ckn???=? 1? (k=0或者n=k)

Ckn???= Ck-1n-1???+ Ckn-1

有了上面的性質我們很容易寫出下面的程序

?

?/***************************************************

?*????? 利用遞歸輸出楊輝三角

?*????? 編程:zheng??????? 2004.10.27

?*????? 程序在BCB6.0下編譯通過

?***************************************************/

#include "stdio.h"

?

static long factorial(long n)

{//n的階乘

?????? return n==0||n==1?1:n*factorial(n-1);

}//factorial

?

static long getelem(long n,long k)

{//利用遞歸計算楊輝三角的第row行,col列的元素

?????? if (k==0||n==k) return 1;

?????? else return getelem(n-1,k-1)+getelem(n-1,k);

}//getelem

?

void output(long n)

{//輸出楊輝三角,n為楊輝三角的階數

?????? int row,col;

?????? for(row=0;row<=n;row++)

?????? {

????????????? for(col=0;col<=row;col++)

???????????????????? printf(" %5ld",getelem(row,col));

????????????? printf("/n");

?????? }//for

}//output

?

總結

以上是生活随笔為你收集整理的利用非数组的方法输出杨辉三角的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。