n遞歸演算法
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);
這個是偽代碼哈,自己去實現