递归算法之因子分解

例一

《递归算法之因子分解》

以20为例递归过程为

《递归算法之因子分解》

#include <iostream>
#include <string>
#include <algorithm>
#include <string.h>
using namespace std;
int sum;
void cnt(int n,int min)//min这个参数保证因子是递增的
{
    for(int i=min;i<n;i++)
    {
        if(n%i==0&&i<=n/i)//第二个条件保证因子递增
        {
            sum++;
            cnt(n/i,i);
        }
    }
}

int main(int argc, char *argv[])
{
     int num;
     cin >> num;
     while(num--)
     {
        int a;
        cin >> a;
        sum=1;
        cnt(a,2);
        printf("%d\n",sum);
     }
    return 0;
}

例二:经典中的经典 汉诺塔问题

《递归算法之因子分解》

私以为递归算法的两个要素分别是1.递归出口2.递归法则。若没有递归出口,递归程序将无限制运行下去。而递归法则便是将本问题和相同的但规模较小的子问题之间的转化。

#include <iostream>
#include <string>
#include <algorithm>
#include <string.h>
using namespace std;
int sum;
void move(int n,char a,char b)
{
    printf("%c->%d->%c\n",a,n,b);
}
void hanoi(int n,char aa,char bb,char cc)
{
    if(n==1)
        move(1,aa,bb);//递归出口
    else
    {
        hanoi(n-1,aa,cc,bb);
        move(n,aa,bb);
        hanoi(n-1,cc,bb,aa);
    }
}

int main(int argc, char *argv[])
{
    int num;char aaa,bbb,ccc;
    cin >> num >>aaa>>bbb>>ccc;
    hanoi(num,aaa,bbb,ccc);
    return 0;
}

    原文作者:递归算法
    原文地址: https://blog.csdn.net/xutian_curry/article/details/79825273
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞