当前位置:首页 » 操作系统 » 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);

这个是伪代码哈,自己去实现

热点内容
搜解压缩 发布:2024-05-17 15:38:32 浏览:764
水泵扬程算法 发布:2024-05-17 15:37:29 浏览:977
英雄联盟技能脚本 发布:2024-05-17 14:59:41 浏览:444
全名k歌安卓手机里面怎么录屏 发布:2024-05-17 14:40:07 浏览:180
常用数据库介绍 发布:2024-05-17 14:31:38 浏览:504
中孚存储介质信息消除工具 发布:2024-05-17 14:31:33 浏览:589
服务器访问ip如何调转主页 发布:2024-05-17 14:30:33 浏览:789
好玩的解压化妆小游戏 发布:2024-05-17 14:10:57 浏览:127
交通银行怎么登陆不了密码 发布:2024-05-17 13:54:48 浏览:543
安卓如何自动连接无线 发布:2024-05-17 13:53:51 浏览:262