递归定义:
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。
递归条件:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
利用递归可以使程序简化,减少代码的编写,下面请看例子。
1.取得十进制数的每一位并以字符的形式输出。
#include<stdio.h>
#include<stdlib.h>
void binary_to_ascii(unsigned int value)
{
int num = value % 10; //模10可得到十进制数的每一位
if (value> 9) //递归结束条件
binary_to_ascii(value / 10); //去掉最后一位,递归调用自身
printf("%c", num + '0'); //加字符0的ascii码值后得到对应字符
}
int main()
{
binary_to_ascii(1234);
system("pause");
return 0;
}
2.不使用临时变量得到字符串长度,利用递归函数
#include<stdio.h>
int my_strlen1(const char *str) //使用临时变量的方式
{
int count = 0;
while (*str)
{
count++;
str++;
}
}
int my_strlen(char *str) //利用递归函数的方式
{
if (*str == '\0') //判断字符串是否为空
return 0;
else
return 1 + my_strlen(str+1); //指向字符串的指针加1返回值就加1
} //注意:此处的str+1不可以用str++或++str替代
int main() //前者指针将会在自加之前一直指向同一个字符
{ //后者尽管可以实现指针向后 加1的目的,但是
char *p = "bit-tech"; //具有副作用,它会改变指针的内容
printf("%d\n", my_strlen(p));
system("pause");
return 0;
}
3.写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
#include<stdio.h>
int DigitSum(int num){
int sum = 0;
int tmp = num % 10;
if (num > 0)
sum = tmp+DigitSum(num / 10);
return sum;
}
int main(){
int num = 0;
printf("请输入一个非负整数\n");
scanf_s("%d", &num);
int ret = DigitSum(num);
printf("%d\n", ret);
return 0;
}
4.编写一个函数实现n^k,使用递归实现
#include<stdio.h>
int calculate(int num, int k){
if (k == 0) //指数为0
return 1;
else //指数不为0
return num * calculate(num, k - 1);//计算k次幂,递归调用k-1次
}
int main(){
int num = 0;
int k = 0;
printf("请输入想要计算的数和幂\n");
scanf_s("%d %d", &num, &k);
printf("%d\n", calculate(num, k));
return 0;
}