首页 > 编程知识 正文

php递归函数遍历数组,递归函数逆序输出字符

时间:2023-05-03 10:09:28 阅读:156788 作者:3379

C函数部分数组的排序和单纯递归调用文章目录C函数部分数组的排序和单纯递归调用1、数组的排序: 2、单纯递归调用(DFS算法初步):1 .步进: wxdj

一.消除排列重量:

主题详细信息

问题摘要:给出长度为n的数组a,并编写函数。 intget_unique_count(inta[],int n ); 返回数组的前n个中不同数量的个数

输入示例:

5

1 1 2 4 5

输出示例:

4

思路

一(本人的想法)首先进行遍历,看看是否存在0。 如果存在,则统计数字为1。 然后,两层循环,第一层从头到尾遍历。

第二层也从头到尾扫描。 但是,如果遇到相同数量,则将第二层循环时遇到的位置数设为0,并将统计数加1。

代码实现:

# include iostream # includecstdiousingnamespacestd; intget_unique_count(inta[],int n ) { int statis=0; for(intI=1; i=n; I ) if (! a[i] ) statis=1; for(intI=1; i=n; I ) if (! a[i] ) continue; for(intj=I1; j=n; j ) if(a(I )==a ) j ) ) a ) j )=0; 斯蒂兹; } return statis; (intmain ) void ) { int n,a[1000]=); cin n; for(intI=1; i=n; I ) cin a[i]; coutget_unique_count(a,n ) endl; 返回0; )第二种是解决问题的方法,用标记判断两层的循环。 这里的两层循环与一个不同的是第二层循环。 这里的第二层循环的判断结束条件是j i。 也就是说,确认第一层循环I每次移位时,默认没有出现,出动第二层循环,确认j从头至I是否确实出现,如果出现,则将其标记为出现。

代码实现如下。

# include iostream # includecstdiousingnamespacestd; intget_unique_count(inta[],int n ) { int res=0; for(intI=0; i n; I ) { bool is_exist=false; for(intj=0; j i; j ) if(a(I )==a ) j ) ) { is_exist=true; 黑; (if (! is_exist(RES; } return res; (intmain ) void ) { int n,a[1000]={0}; cin n; for(intI=0; i n; I ) cin a[i]; coutget_unique_count(a,n ) endl; 返回0; (二)简单递归调用(DFS算法初步)这里有兴趣的小伙伴可以研究一dfs算法,dfs借助递归实现,是练习递归函数的有效方法。dfs算法简介:即深度优先搜索算法,本质为一种枚举,是借助计算机的高性能来有目的的枚举一个问题的部分情况或这个问题所有的情况,进而求出的一种方法

如果你想进一步了解这个算法,请进行下一步

1 .跳楼梯:主题详情

问题概述:一个楼梯有n级楼梯,每次可以走一级或两级。 从第0级楼梯到第n级楼梯有几种方案?

输入示例:

5

输出示例:

8

法一:代码如下。

# include iostream # includecstdiousingnamespacestd; int res=0; intf(intn ) if ) n==1)返回1; if(n==2)返回2; returnf(n-1 ) f ) n-2; (intmain ) void ) ) { int n; cin n; coutf(n ) endl; 返回0; }可以将所有递归改写为循环,循环效率高,因此:

其实就与斐波那契数列类似

法二:代码如下。

# include iostream # includecstdiousingnamespacestd; intmain(void ) { int n,f ) 16 )={ 0,1,2 }; cin n; for(intI=3; i=n; I ) f(I )=f(I-2 ) f ) I-1 ); cout f[n] endl; 返回0; )走wxdj主题详情

问题概要:给定n*m的kkddd,沿着wxdj的边界线走,从左上角(0,0 )开始,每次只能向右或向下走一个单位的距离。 到右下角) n,m )总共有几种不同的走法?

输入示例:

2 3

输出示例:

10

思路:一个是排列的组合方式,第二个是dfs的方式

法一:排列组合

难点是组合数的求法,可以大大优化。 关于组合数的求解方法请参照我以前的博文

代码如下所示。

# include iostream # includecstdiousingnamespacestd; 求出voidcombinumber(void ) /组合数({ int i,m,n; 龙龙sum=1; scanf('%d%d ),n,m ); n =m; for(I=1; i=m; I ) sum*=n----; sum /=i; }printf('%lld(n ),sum ); 返回; }intmain(void ) { CombiNumber; 返回0; (方法2 ) dfs深度优先搜索法

# include iostream # includecstdiousingnamespacestd; int n,m,ans=0; voidDFS(intx,int y ) if ) x==ny==m ) /边界判定ans; if(xn ) DFS ) x1,y ); if(ym ) DFS ) x,y 1; 返回; (intmain ) void ) { cin n m; DFS (0,0; cout ans endl; 返回0; } 以上就是这次分享的全部内容了,如有错误请指正,谢谢~

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。