例一
以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;
}