遞歸演算法求n
1. c語言用遞歸法計算n
longff(intn)//函數作用是計算N的階乘
{
longf;
if(n<0)printf("n<0,inputerror");//n不能為負數
elseif(n==0||n==1)f=1;//這里使ff(0)和ff(1)等於1
elsef=ff(n-1)*n;//這里使ff(n)=n*ff(n-1),重要,因為當形參n=n-1時,ff(n-1)=ff(n-2)*(n-1),所以這一步實際實現了n階乘計算,即ff(n)=n*ff(n-1)=n*(n-1)*ff(n-2).....*ff(1)*ff(0),因為ff(0)==ff(1)==1.所以ff(n)=n!實現。
return(f);
}
2. 請問如何通過遞歸法求N個整數的和在線等,謝謝!!
#include <stdio.h>
void main()
{
int sum(int);
int n;
printf("請輸入任意個數值:\n");
scanf("%d",&n);
printf("這%d個數值的和是%d\n",n,sum(n));
}
int sum(int n)
{
if(n==1) return 1;
else return n+sum(n-1);
}
3. 利用遞歸演算法求n!
1、先採用冒泡法對數組P(N)進行升序排列.
For I = 1 To N - 1
JHBZ = 0 '數據是否交換的標志,凡發生交換就置JHBZ=1,否則為0.
For J = 1 To N - I
If P(J) > P(J + 1) Then
T = P(J)
P(J) = P(J + 1)
P(J + 1) = T
JHBZ = 1
End If
Next J
If JHBZ = 0 Then Exit For
Next I
2、數組P(N)的最後一個元素就是我們所求的最大元素。
4. 求階乘n!的遞歸演算法
#include<stdio.h>
int fun(int n)
{
if(n==1||n==0) return 1;//如果參數是0或者1返回1
return n*fun(n-1);//否則返回n和下次遞歸的積
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
/*
5
120
*/
【遞歸演算法的原理】
遞歸是計算機科學的一個重要概念,遞歸的方法是程序設計中有效的方法,採用遞歸編寫
遞歸能使程序變得簡潔和清晰。
5. 用遞歸方法求n!,程序如下:求每一句程序的說明,謝謝!
主函數就不用說了吧,就是讓你輸入一個數字然後調用fac方法,最後輸出結果。
所謂遞歸函數,就是函數自身不斷的調用自己,在某個條件成立的時候跳出。一般都是以計算階乘作為例子,你這個程序實現的也是計算階乘的功能。
if(n<0)
{
printf(「n<0,dataerror!」);
}
以上這句基本沒用,就是對你所輸入的數字進行判斷,要求你所輸入的數字大於0才計算階乘,也就是才執行下面的部分。
else
if(n= =0| |n= =1)
f=1;
這里很重要,是遞歸函數退出的條件。
else
f=fac(n-1)*n;
這里就是所謂的自己調用自己 fac(n-1)是調用自己,*n是為了計算f的值。
我們假設你在主函數裡面輸入3,即y=fac(3);
那麼fac函數執行如下:
n=3時進入函數,f=fac(2)*3;此時程序會進入fac(2),傳入的參數n變成了2,
但是並不執行return(f),return(f)要等fac(2)執行完成之後才能執行。
fac(2)中f=fac(2-1)*2,即f=fac(1)*2,此時程序會進入fac(1),傳入的參數n變成了1,
但是並不執行return(f),return(f)要等fac(1)執行完成之後才能執行。
fac(1)中,符合 if(n= =0| |n= =1),所以f=1.
fac(1)將結果f return給fac(2),fac(2)中的f=1*2=2;
fac(2)再將自己的f return給fac(3),fac(3)中的f=2*3=6;
這樣y=fac(3)=6.
這個過程說起來很麻煩,可能我表達的也不是很清楚,你也很難理解。
建議你自己把這個程序加斷點跟進,一步一步看一下程序的執行過程。
調試是學程序的最好方法
6. c語言算n的階乘的遞歸演算法
思路:遞歸求階乘函數,如果輸入的參數等於1則返回1,否則返回n乘以該函數下次遞歸。
參考代碼:
#include<stdio.h>
intfun(intn)
{
if(n==1||n==0)return1;//如果參數是0或者1返回1
returnn*fun(n-1);//否則返回n和下次遞歸的積
}
intmain()
{
intn;
scanf("%d",&n);
printf("%d ",fun(n));
return0;
}
/*
5
120
*/
7. python用遞歸方法求n!
python使用遞歸求方法求解n的階乘
n = int(input("請輸入一個數字:\n"))
def demo(n):
sum = 0
if n == 0:
sum = 1
else:
sum = n * demo(n - 1)
return sum
print("%d 的階乘為 %d"%(n,demo(n)))
8. 用遞歸方法求n! 下面遞歸函數的編寫有錯,改正。
#include<stdio.h>
float fac(int n)//聲的時候加變數名,不然你下面的n哪裡來的啊?
{
float f;
if (n<0)
{
printf("n<0, dataerror!");//雙引號要用英文的
}
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;//是n-1,n要越來越小才行啊,要不然的話你哪有機會到0,1那裡去啊?
return f;
}
int main()
{
int n;
scanf("%d",&n);
printf("%.0f\n",fac(n));
return 0;
}
9. 由遞歸方式求的N的階乘(即N,),時間復雜度是多少
每次遞歸內部計算時間是常數,故O(n)。
用遞歸方法計算階乘,函數表達式為f(n)=1 若n=0 f(n)=n*f(n-1),若n>0,如果n=0,就調用1次階乘函數,如果n=1,就調用2次階乘函數,如果n=2,就調用3次階乘函數,如果n=3,就調用4次階乘函數。
(9)遞歸演算法求n擴展閱讀:
注意事項:
利用遞歸樹方法求演算法復雜度,其實是提供了一個好的猜測,簡單而直觀。在遞歸樹中每一個結點表示一個單一問題的代價,子問題對應某次遞歸函數調用,將樹中每層中的代價求和,得到每層代價,然後將所有層的代價求和,得到所有層次的遞歸調用總代價。
遞歸樹最適合用來生成好的猜測,然後可用代入法來驗證猜測是否正確。當使用遞歸樹來生成好的猜測時,常常要忍受一點兒不精確,因為關注的是如何尋找解的一個上界。
10. c語言編程:用遞歸實現計算n!。
由於對於任意的n,
n! = (n-1)! * n;
即令f(n) = n!,存在公式
f(n) = f(n-1) * n;
在這個遞歸公式下,編寫遞歸求階乘代碼如下:
intfac(intn)
{
if(n==0||n==1)return1;
returnfac(n-1)*n;
}