一行代碼算出1!+2!+3!+4!+5!+6!+7!+8!+9!+10!+...+N! N階階乘求和
時間複雜度爲O(n)
空間複雜度爲O(1)
對於任意正整數N 求1!-N!一行算出和給定求1!+...+N!的和(0的階乘爲1,本方法適用)
for(long sum=1;N>1;N--) sum=sum*n+1;
//sum爲和
原理分析:
首先列出前三項找規律如下圖,發現求1-N階階乘中的規律 因式分解得 1(1+2(1+3(1+4(1+5(1+N)))))
代碼實現
用Java語言寫成函數f(n):
long f(long n)
{
long sum=1;//1-n階階乘的和
for(;n>1;n--)
sum=sum*n+1;
return sum;
}
Python語言:
def f(n):
sum = 1
while n > 1:
sum = sum * n + 1
n-=1
return sum
C語言:
long f(long n)
{
long sum=1;
for(;n>1;n--)
sum=sum*n+1;
return sum;
}
遞歸法
Java語言:
long f(long n,long sum)//sum初始值爲1
{
if(n>1)
return f(n-1,sum*n+1);
return sum;
}
Python語言:
def f(n, sum=1):
if n > 1:
return f(n - 1, sum * n + 1)
return sum
C語言:
long f(long n,long sum)//sum初始值爲1
{
if(n>1)
return f(n-1,sum*n+1);
return sum;
}
本文章爲作者原創,如無作者授權不得他用!