當前位置:首頁 » 操作系統 » 遞歸演算法求n

遞歸演算法求n

發布時間: 2022-06-29 07:03:01

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;
}
熱點內容
phpxml轉換 發布:2024-11-16 05:47:10 瀏覽:955
內網伺服器搭建什麼公司做 發布:2024-11-16 05:36:24 瀏覽:594
如何利用map做本地緩存 發布:2024-11-16 05:34:37 瀏覽:539
w7恢復出廠設置密碼是多少 發布:2024-11-16 05:23:49 瀏覽:791
方周編譯器 發布:2024-11-16 05:23:12 瀏覽:660
資料庫監控工具 發布:2024-11-16 05:23:07 瀏覽:958
存儲器題型 發布:2024-11-16 05:23:06 瀏覽:86
怎麼設置電腦配置信息 發布:2024-11-16 05:04:26 瀏覽:981
推薦系統php 發布:2024-11-16 05:03:42 瀏覽:12
加密mp3文件 發布:2024-11-16 04:43:04 瀏覽:843