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

n遞歸演算法

發布時間: 2022-08-04 02:51:09

1. 設計遞歸演算法生成n個元素的所有排列對象

#include<iostream>
#include<iterator>
#include<algorithm>
using namespace std;

template<class T>
void permutation(T list[], int k, int m)
{
if (k == m)
{
(list, list + m + 1, ostream_iterator<T>(cout, "")); //將當前list排序
cout << endl;
}
else{
for (int i = k; i <= m; i++)
{
swap(list[i], list[k]); //將下標為i的元素交換到k位置,類似從list[k:m]中剔除操作
permutation(list, k + 1, m);
swap(list[i], list[k]);
}
}
}

int main(int argc, char* argv[])
{
char arr[3] = { 'a', 'b', 'c' };
cout << "排序結果如下:" << endl;
permutation(arr, 0, 2);
return 0;

}

(1)n遞歸演算法擴展閱讀

遞歸,在數學與計算機科學中,是指在函數的定義中使用函數自身的方法。也就是說,遞歸演算法是一種直接或者間接調用自身函數或者方法的演算法。

通俗來說,遞歸演算法的實質是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法來表示問題的解。

遞歸的基本原理

第一:每一級的函數調用都有自己的變數。

第二:每一次函數調用都會有一次返回。

第三:遞歸函數中,位於遞歸調用前的語句和各級被調用函數具有相同的執行順序。

第四:遞歸函數中,位於遞歸調用後的語句的執行順序和各個被調用函數的順序相反。

第五:雖然每一級遞歸都有自己的變數,但是函數代碼並不會得到復制。

2. N! 遞歸演算法(vb)

Public Function calc(ByVal n As Integer) As Double
Dim kk As Double '這個變數定義的沒有什麼用
If n = 1 Then
calc = 1
Else
calc = n * calc(n - 1)
End If
End Function

3. N! 的遞歸演算法 C或java都可以..

public class text5
{
public static int m1(int m)
{
if(m==1)
return m;
else
return m*m1(m-1);
}
public static void main(String[] args)
{
int n=10;
int a=m1(n);
System.out.println(a);
}
}

java的遞歸法算10的階乘

4. 階乘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
*/

5. 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);
}

6. 一個求n!的遞歸演算法 float fun(int n) { if(n==1) return 1; return n*fun(n-1); }的時間復雜度為多少

復雜度為o(n)
遞歸復雜度求法:設T(n)
則根據遞歸式有T(n) = 1+T(n-1)
T(1) = 1
所以T(n) = o(n)

7. 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
*/

8. 試寫出求遞歸函數F(n)的遞歸演算法,並消除遞歸

你先了解這個函數的作用,結果就是 n*(n/(2^1)*(n/(2^2))*(n/(2^3))*(n/(2^4))……*1
n*(n/2)*(n/4)*(n/8)*……*1
while( n >= 0)
{
if(n !=0)
{ push();//將n壓入棧內
n = n/2
}
else
{
push(n+1);//或者是push(1);
}
}
double result = 1;
while(棧不為空)
{
result = result * pop();//取出值並相乘
}
printf("%lf",result);

這個是偽代碼哈,自己去實現

熱點內容
王者榮耀電腦如何改戰區安卓 發布:2025-01-17 13:23:18 瀏覽:814
華為手機如何開啟說出密碼 發布:2025-01-17 13:23:12 瀏覽:101
伺服器在美國說明什麼 發布:2025-01-17 13:14:10 瀏覽:11
啟辰t90有哪些配置 發布:2025-01-17 13:05:40 瀏覽:38
手機微博密碼怎麼改密碼忘了怎麼辦 發布:2025-01-17 13:04:44 瀏覽:959
微笑雲伺服器 發布:2025-01-17 13:03:25 瀏覽:83
android頂部標題欄 發布:2025-01-17 13:02:28 瀏覽:692
androidjs傳遞參數 發布:2025-01-17 12:51:54 瀏覽:477
建築大師輔助腳本 發布:2025-01-17 12:47:33 瀏覽:331
sql向上 發布:2025-01-17 12:43:57 瀏覽:275