递归求年龄:
5个人坐在一起,问第5个人多少岁?他说比第四个人大2岁,第4个人比第3个人大2岁,第3个人比第2个人大2岁,第1个人为10岁,问第五个人多大?
#include <iostream>
using namespace std;
int age(int a)
{
int c;
if(a==1)
{
return 10;
}
c=age(a-1)+2;
return c;
}
int main(int argc, char** argv)
{
cout<<age(5)<<endl;
return 0;
}
用递归求阶乘:
5!=1X2X3X4X5=120;
#include <iostream>
using namespace std;
int factorial(int a)
{
int c;
if(a<0)
{
cout<<"输入错误";
}
else if(a==0||a==1)
c=1;
else
{
c=factorial(a-1)*a;
}
return c;
}
int main(int argc, char** argv)
{
int n;
cin>>n;
cout<<n<<"!="<<factorial(n)<<endl;
}
逆序输出字符串:
输入:ABCDE 输出:EDCBA
#include <iostream>
#include<stdio.h>
//#include<string.h>
using namespace std;
void reverse(int a)
{
char next;
//递归结束条件
if(a<=1)
{
//从键盘获得一个字符
next=getchar();
cout<<"\n";
putchar(next);
}
else
{
//从键盘获得一个字符
next=getchar();
//调用输入的下一个字符
reverse(a-1);
putchar(next);
}
}
int main(int argc, char** argv)
{
int i=5;
reverse(i);
return 0;
}
逆序数:
从右往左输出,余数为0则为递归条件
#include <iostream>
#include<stdio.h>
//#include<string.h>
//输入一个非负整数,输出这个数的倒序数
using namespace std;
int turn(int a)
{
if(a>=10)
{
//每次减小10倍再求余
cout<<a%10;
turn(a/10);
}
else
{
cout<<a;
}
}
int main(int argc, char** argv)
{
int i;
cin>>i;
turn(i);
}
整数转字符串:
#include <iostream>
#include<stdio.h>
//#include<string.h>
//输入一个非负整数,输出这个数的倒序数
using namespace std;
void convert(int a)
{
int i;
if((i=a/10)!=0)
{
convert(i);//483第一次分解为48,第二次为4
putchar(a%10+'0');
}
}
int main(int argc, char** argv)
{
int number;
cin>>number;
/*
if(number<0)
{
putchar('-');
number=-number;
}
*/
convert(number);
return 0;
}
计算两个数最大公约数:
#include <iostream>
using namespace std;
int gcd(int m,int n)
{
if(n==0)
{
return m;
}
else
return gcd(n,m%n);
}
int main(int argc, char** argv) {
int a,b,t;
cin>>a>>b;
if(a<b)
{
t=a;
a=b;
b=t;
}
cout<<gcd(a,b)<<endl;
return 0;
}