求階乘的演算法
⑴ 求階乘的演算法 大學計算機
階乘是基斯頓·卡曼(Christian Kramp,1760~1826)於 1808 年發明的運算符號,是數學術語。
一個正整數的階乘(英語:factorial)是所有小於及等於該數的正整數的積,並且0的階乘為1。自然數n的階乘寫作n!。1808年,基斯頓·卡曼引進這個表示法。
亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。
正整數階乘指從 1 乘以 2 乘以 3 乘以 4 一直乘到所要求的數。
例如所要求的數是 4,則階乘式是 1×2×3×4,得到的積是 24,24 就是 4 的階乘。 例如所要求的數是 6,則階乘式是 1×2×3×……×6,得到的積是 720,720 就是 6 的階乘。例如所要求的數是 n,則階乘式是 1×2×3×……×n,設得到的積是 x,x 就是 n 的階乘。
通常我們所說的階乘是定義在自然數范圍里的(大多科學計算器只能計算 0~69 的階乘),小數沒有階乘,如 0.5!,0.65!,0.777!都是錯誤的。
希望我能幫助你解疑釋惑。
⑵ 怎樣計算「階乘」
說實話,沒有計算階乘的公式,也沒有簡便方法,只是硬算,也可以運用計算機,可以計算到65!,如果你想計算跟大的數,我建議你上網路尋找計算階乘的軟體,聽說多大的數都能計算出來。
還有這個參考:
由於階乘運算的增長速度特別快(比2^n的增長速度快),對於較小整數的階乘運算採用簡單的遞規演算法可以實現,但是對於大整數的乘法(比如1000!),則傳統的遞規演算法就失去了作用。
由於本人的水平不高,用下列拙劣的方式實現,請高人多多指教。具體如下:定義一個很長的數組,用數組的每一項表示計算結果的每一位。例如,7!=5040,a[1000],則a[0]=0,a[1]=4,a[2]=0,a[3]=5。
程序源代碼:
/**
*計算大數的階乘,演算法的主要思想就是將計算結果的每一位用數組的一位來表示:如要計算5!,那麼首先將
*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //將數組元素初始化
a[0] = 1; //用數組的一項存放計算結果的位數
a[1] = 1; //將第一項賦值為一
for(int j= 2; j <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的進位
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//將來自低位的計算結果和本位的結果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
}
}
public static void main(String[] args)
{
String num = args[0];
int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>0; i--)
{
count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778
參考資料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx
⑶ 階乘公式怎麼運算的
公式:n!=n*(n-1)!
階乘的計算方法
階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。
例如所要求的數是6,則階乘式是1×2×3×..×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×…×n,設得到的積是x,x就是n的階乘。
階乘的表示方法
在表達階乘時,就使用「!」來表示。如x的階乘,就表示為x!
他的原理就是反推,如,舉例,求10的階乘=10*9的階乘(以後用!表示階乘)那麼9!=?,9!=9*8!,8!=8*7!,7!=7*6!,6!=6*5!,5!=5*4!,4!=4*3!,
3!=3*2!,2!=2*1!,1的階乘是多少呢?是1
1!=1*1,數學家規定,0!=1,所以0!=1!然後在往前推算,公式為n!(n!為當前數所求的階乘)=n(當前數)*(n-1)!(比他少一的一個數n-1的階乘把公式列出來像後推,只有1的!為1,所以要從1開始,要知道3!要知道2!就要知道1!但必須從1!開始推算所以要像後推,如果遍程序演算法可以此公式用一個函數解決,並且嵌套調用次函數,,)把數帶入公式為,
1!=1*1
2!=2*1(1!)
3!=3*2(2!)
4=4*6(3!),如果要是編程,怎麼解決公式問題呢
首先定義演算法
//演算法,1,定義函數,求階乘,定義函數fun,參數值n,(#include
long
fun(int
n
)
//long
為長整型,因20!就很大了超過了兆億
(數學家定義數學家定義,0!=1,所以0!=1!,0與1的階乘沒有實際意義)
2,函數體判斷,如果這個數大於1,則執行if(n>1)(往回退算,這個數是10求它!,要從2的階乘值開始,所以執行公式的次數定義為9,特別需要注意的是此處,當前第一次寫入代碼執行,已經算一次)
求這個數的n階乘(公式為,n!=n*(n-1)!,並且反回一個值,
return
(n*(fun(n-1));(這個公式為,首先這個公式求的是10的階乘,但是求10的階乘就需要,9的階乘,9的階乘我們不知道,所以就把10減1,也就是n-1做為一個新的階乘,從新調用fun函數,求它的階乘然後在把這個值返回到
fun(n-1),然後執行n*它返回的值,其實這個公式就是調用fun函數的結果,函數值為return
返回的值,(n-1)為參數依次類推,...一值嵌套調用fun函數,
到把n-1的值=1,
注意:此時已經運行9次fun()函數算第一次運行,,調用幾次fun函數呢?8次函數,所以,n-1執行了9次,n-1=1
,n=2已經調用就可以求2乘階值
⑷ 階乘如何計算
你好
階乘(factorial)是基斯頓·卡曼(Christian Kramp, 1760 – 1826)於1808年發明的運算符號。
階乘,也是數學里的一種術語。
[編輯本段]【階乘的計算方法】
階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。 例如所要求的數是6,則階乘式是1×2×3×……×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×……×n,設得到的積是x,x就是n的階乘。
[編輯本段]【階乘的表示方法】
在表達階乘時,就使用「!」來表示。如x的階乘,就表示為x!
如:n!=n×(n-1)×(n-2)×(n-3)×...×1
階乘的另一種表示方法:(2n-1)!!
當n=2時,3!!=3×1=3
當n=3時,5!!=5×3×1=15
當n=4時,7!!=7×5×3×1=105
...(以此類推)
[編輯本段]【20以內的數的階乘】
以下列出0至20的階乘:
0!=1,
1!=1,
2!=2,
3!=6,
4!=24,
5!=120,
6!=720,
7!=5040,
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
另外,數學家定義,0!=1,所以0!=1!
[編輯本段]【階乘的定義范圍】
通常我們所說的階乘是定義在自然數范圍里的,小數沒有階乘,像0.5!,0.65!,0.777!都是錯誤的。但是,有時候我們會將Gamma函數定義為非整數的階乘,因為當x是正整數n的時候
⑸ 階乘的公式是怎樣的
程序源代碼:
/**
*計算大數的階乘,演算法的主要思想就是將計算結果的每一位用數組的一位來表示:如要計算5!,那麼首先將
*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //將數組元素初始化
a[0] = 1; //用數組的一項存放計算結果的位數
a[1] = 1; //將第一項賦值為一
for(int j= 2; j <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的進位
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//將來自低位的計算結果和本位的結果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
⑹ 階乘的公式是什麼
公式:n!=n*(n-1)!
階乘的計算方法
階乘指從1乘以2乘以3乘以4一直乘到所要求的數。
例如所要求的數是4,則階乘式是1×2×3×4,得到的積是24,24就是4的階乘。
例如所要求的數是6,則階乘式是1×2×3×..×6,得到的積是720,720就是6的階乘。例如所要求的數是n,則階乘式是1×2×3×…×n,設得到的積是x,x就是n的階乘。
階乘的表示方法
在表達階乘時,就使用「!」來表示。如x的階乘,就表示為x!
他的原理就是反推,如,舉例,求10的階乘=10*9的階乘(以後用!表示階乘)那麼9!=?,9!=9*8!,8!=8*7!,7!=7*6!,6!=6*5!,5!=5*4!,4!=4*3!,
3!=3*2!,2!=2*1!,1的階乘是多少呢?是1
1!=1*1,數學家規定,0!=1,所以0!=1!然後在往前推算,公式為n!(n!為當前數所求的階乘)=n(當前數)*(n-1)!(比他少一的一個數n-1的階乘把公式列出來像後推,只有1的!為1,所以要從1開始,要知道3!要知道2!就要知道1!但必須從1!開始推算所以要像後推,如果遍程序演算法可以此公式用一個函數解決,並且嵌套調用次函數,,)把數帶入公式為,
1!=1*1
2!=2*1(1!)
3!=3*2(2!)
4=4*6(3!),如果要是編程,怎麼解決公式問題呢
首先定義演算法
//演算法,1,定義函數,求階乘,定義函數fun,參數值n,(#include
long
fun(int
n
)
//long
為長整型,因20!就很大了超過了兆億
(數學家定義數學家定義,0!=1,所以0!=1!,0與1的階乘沒有實際意義)
2,函數體判斷,如果這個數大於1,則執行if(n>1)(往回退算,這個數是10求它!,要從2的階乘值開始,所以執行公式的次數定義為9,特別需要注意的是此處,當前第一次寫入代碼執行,已經算一次)
求這個數的n階乘(公式為,n!=n*(n-1)!,並且反回一個值,
return
(n*(fun(n-1));(這個公式為,首先這個公式求的是10的階乘,但是求10的階乘就需要,9的階乘,9的階乘我們不知道,所以就把10減1,也就是n-1做為一個新的階乘,從新調用fun函數,求它的階乘然後在把這個值返回到
fun(n-1),然後執行n*它返回的值,其實這個公式就是調用fun函數的結果,函數值為return
返回的值,(n-1)為參數依次類推,...一值嵌套調用fun函數,
到把n-1的值=1,
注意:此時已經運行9次fun()函數算第一次運行,,調用幾次fun函數呢?8次函數,所以,n-1執行了9次,n-1=1
,n=2已經調用就可以求2乘階值
⑺ 階乘的演算法
階乘的數字是幾,就是從1按自然數的順序乘到這個數
比如4的階乘就是1×2×3×4=24
⑻ 階乘的計算方法
正整數階乘指從 1 乘以 2 乘以 3 乘以 4 一直乘到所要求的數。例如所要求的數是 4,則階乘式是 1×2×3×4,得到的積是 24,24 就是 4 的階乘。 例如所要求的數是 6,則階乘式是 1×2×3×……×6,得到的積是 720,720 就是 6 的階乘。例如所要求的數是 n,則階乘式是 1×2×3×……×n,設得到的積是 x,x 就是 n 的階乘 。
⑼ 整數n(n>=0)階乘的演算法怎麼求
#include<stdio.h>
int main(void)
{
int i,s=1;
printf("Please input a intdata:");
scanf("%d",&i);
for(;i>1;i--)
s*=i;
printf("%d ",s);
return 0;
}
這是一個遞歸程,可以看出每遞歸一次n的規模小一,所是結果是線性的。
⑽ 階乘是怎樣計算的
5的階乘就是5×4×3×2×1。
階乘(一個數n的階乘寫成n!)的演算法:
n!=1×2×3×...×(n-1)×n。
定義:0!=1,n!=(n-1)!×n