十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
方法和分析見(jiàn)下文:
讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、武漢網(wǎng)站維護(hù)、網(wǎng)站推廣。
分析
1、確定基本要求,應(yīng)作為方法的限定條件或特殊情況處理
(1)規(guī)定:0!=1
(2)規(guī)定:n!中n非負(fù)
2、確定邏輯:
階乘是比較適合遞歸的思路,因?yàn)閚!=n*(n-1)!,直到求解1!作為結(jié)束
代碼(因?yàn)椴惶煜ava,可能還需要題主進(jìn)行微調(diào))
long Factorials(int n)
{
if(n0) return -1;//主要為了表示錯(cuò)誤,題主可以自定義
if(n==1||n==0) return 1;//0!是特殊約定,1!是作為遞歸的結(jié)束
else return n*Factorials(n-1);//進(jìn)行遞歸,求解階乘結(jié)果
}
Java編程:寫(xiě)出求n的階乘的方法,并算出1到7的階乘的和方法:
先編寫(xiě)求階乘的方法,再通過(guò)for循環(huán)計(jì)算1到7的階乘的和。
具體實(shí)現(xiàn):
public?class?Test?{
public?static?void?main(String[]?args)?{
int?sum?=?0;??//保存階乘的和
for(int?i?=?1;i=7;i++)
sum?+=?factorial(i);
System.out.println(sum);
}
//?求階乘方法,傳入一個(gè)整數(shù),返回這個(gè)整數(shù)的階乘
public?static?int?factorial(int?num)?{
int?result?=?1;
for(int?i?=?1;i=num;i++){
result?*=?i;
}
return?result;
}
}
代碼如下
import java.util.Scanner;
public class Calculate {
public static void main(String[] args) {
// TODO Auto-generated method stub
long sum=1;
System.out.println("請(qǐng)輸入要計(jì)算階乘的正整數(shù):");
Scanner sc=new Scanner(System.in);
int b=sc.nextInt();
for (int i=1; i=b; i++) {
sum *=i;
}
System.out.println("該數(shù)的階乘為:"+sum);
}
}
1、采用自頂向上的遞歸方法,代碼如下:
import?java.util.Scanner;
public?class?Test?{
@SuppressWarnings("resource")
public?static?void?main(String[]?args)?{
//?從控制臺(tái)輸入一個(gè)整數(shù)
Scanner?in?=?new?Scanner(System.in);
int?b?=?in.nextInt();
//?聲明一個(gè)Test對(duì)象,調(diào)用cal方法獲得結(jié)果
Test?test?=?new?Test();
long?a?=?test.cal(b);
System.out.println(a);
}
//?通過(guò)遞歸掉調(diào)用最終返回結(jié)果
public?long?cal(int?number)?{
//?如果數(shù)字為1,則直接返回
if?(number?==?1)?{
return?1;
}?else?{//?否則遞歸求值
return?number?*?cal(number?-?1);
}
}
}
2、遞歸方法:
遞歸算法是把問(wèn)題轉(zhuǎn)化為規(guī)模縮小了的同類(lèi)問(wèn)題的子問(wèn)題。然后遞歸調(diào)用函數(shù)(或過(guò)程)來(lái)表示問(wèn)題的解。一個(gè)過(guò)程(或函數(shù))直接或間接調(diào)用自己本身,這種過(guò)程(或函數(shù))叫遞歸過(guò)程(或函數(shù)).
3、特點(diǎn):
(1) 遞歸就是在過(guò)程或函數(shù)里調(diào)用自身。
(2) 在使用遞歸策略時(shí),必須有一個(gè)明確的遞歸結(jié)束條件,稱(chēng)為遞歸出口。
(3) 遞歸算法解題通常顯得很簡(jiǎn)潔,但遞歸算法解題的運(yùn)行效率較低。所以一般不提倡用遞歸算法設(shè)計(jì)程序。
(4) 在遞歸調(diào)用的過(guò)程當(dāng)中系統(tǒng)為每一層的返回點(diǎn)、局部量等開(kāi)辟了棧來(lái)存儲(chǔ)。遞歸次數(shù)過(guò)多容易造成棧溢出等。所以一般不提倡用遞歸算法設(shè)計(jì)程序。
使用BigInteger大容量運(yùn)算類(lèi)計(jì)算100的階乘
一.一般算法(循環(huán))
view plaincopy to clipboardprint?
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
public class Test {
public static void main(String[] args) {
int result = 1;
for (int i = 1; i = 100; i++) {
result *= i;
}
System.out.println(result);
}
}
輸出結(jié)果為0,因?yàn)閕nt無(wú)法保存下100的階乘的結(jié)果,100的階乘的長(zhǎng)度至少大于50位,也要大于long,double
二.使用BigInteger大容量運(yùn)算類(lèi)
view plaincopy to clipboardprint?
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//為result賦初始值,為1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//調(diào)用自乘方法
}
System.out.println(result);//輸出結(jié)果
System.out.println(String.valueOf(result).length());//輸出長(zhǎng)度
}
}
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
BigInteger result = new BigInteger("1");//為result賦初始值,為1
for (int i = 1; i = 100; i++) {
BigInteger num = new BigInteger(String.valueOf(i));
result = result.multiply(num);//調(diào)用自乘方法
}
System.out.println(result);//輸出結(jié)果
System.out.println(String.valueOf(result).length());//輸出長(zhǎng)度
}
}
計(jì)算結(jié)果為:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
產(chǎn)度:158
求階乘用for就行,假設(shè)我們要對(duì)num求階乘,結(jié)果是result
int result = 1;
for (int i=1;i=num;i++){
result *= i;
}
此時(shí)result的值即為num的階乘(僅正整數(shù))