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]);
}}
三、整数因子分解问题
求解:对输入正整数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