练习1:实现1+2+3+4+100的递归函数,recursion:递归
int recursion(int n)
{
if (n==1)
{
return 1;//如果n==1,recursion(1)等于1
}
else{
return recursion(n-1)+n;//递归运算
}
}
void main200()
{
printf("\n%d", recursion(100));
system("pause");
}
练习2:函数递归,阶乘factorial
int factorial(int num)
{
if (num == 1)
{
return 1;
}
else{
return num*factorial(num - 1);
}
}
void main201()
{
printf("\n阶乘结果为=%d",factorial(3));
system("pause");
}
练习3 将10进制数据转换成二进制数据
将10进制数据转换成二进制数据 10->1010,原理即使不断除以2取出余数,不能用循环来实现,因为循环是正序排列,递归是逆序排列。大家思考一下,我们也可以用栈来逆序排列,实现递归所实现的东西
int tenTotwo(int num)
{
if (num==0)
{
return;
}
else{
tenTotwo(num/2);//调用函数,取整除以2
printf("%d", num % 2);
/*
如果printf("%d",num%2);在上面,结果就是正序,不是逆序
printf("%d",num%2);
tenTotwo(num/2);
*/
}
}
void main261()
{
int num;
scanf_s("%d",&num);
printf("你要转换的十进制数是%d\n",num);
printf("转换以后的二进制数是");
tenTotwo(num);
system("pause");
}
void tenTotwo(int n)//tenTotwo:十进制转二进制,n转换为二进制
{
if (n==0)//递归的标准形式
{
//n=0的情况下,没有必要继续
}
else{
int m = n % 2;//取出余数
//printf("%d", m);//放在前面,递归调用之前,就是顺序,否则就是逆序
tenTotwo(n / 2);//用递归的方式调用,不断除以2
printf("%d",m);//递归调用之后实际上就是逆序
}
}
void main202()
{
tenTotwo(89);
system("pause");
}
练习4 腾讯面试题,
练习6:汉诺塔递归算法