C++函数之递归算法初解

C++函数之递归算法初解

一、递归概念

1、递归的定义:函数定义的内部操作中直接或间接地出现对自身的调用

2、递归概念:把大型复杂问题一步步转化为一个与原问题相似的较小规模问题从而求解,即通过少量程序描述出多次重复计算来减少程序代码量,用有限语句定义对象的大量集合。

3、直接递归:函数直接调用自身

间接递归:函数间接调用自身

二、递归的全排列问题

产生从元素k~m的全排列,作为前k—1个元素的后缀

void Perm(int list[ ], int k, int m)//无返回值类型

{                                      //构成了一次全排列,输出结果

              if(k==m)

             {

                            for(int i=0;i<=m;i++)

                                          cout<<list[i]<<endl;             }

              else                            //在数组list中,产生从元素k~m的全排列

                            for(int j=k;j<=m;j++)

                            {

                                          swap(list[k],list[j]);

                                          Perm(list,k+1,m);//又一次调用函数perm()

                                          swap(list[k],list[i]);

                           }}

三、整数因子分解问题 

例:zhengs整数因子的分解
大于1 的正整数n 可以分解为:n=x1 *x 2*…*xm 。                            
求解:对输入正整数n,有多少种不同的分解式。 

解题方法:递归进行逐个搜索,每次进行求模=0 即为分解数,递归此数直到为1即可累计个数加1

 #include <bits/stdc++.h> //万能表头,c++所有库  

  int yue;  

  void yxr(int n)  

  {  

      if(n == 1)//当商为1时即为已经算出一次分解累计递增  

          count++;  

      for(int i=2;i<=n;i++)//每个数进行筛选  

      {  

          if(n % i == 0)//可分解数  

              yxr(n/i);//分解  }  }  

  int main()  

  {  

      int n;  

      while(scanf("%d",&n)!=EOF)                                     {  

            yue = 0;

          solve(n);  

          printf("%d\n",yue);  

      }   return 0;  }////函数名可自行命名,此例为博主自行命名。

本博客为博主原创内容,博主c++水平有限,如有疑问请留言或联系岳禧嵘  QQ:2394302457

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值