递归定义:

个过程或函数在其定义或说明中有直接或间接调用自身的一种方法。

递归条件:

(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;

}