递归有两个特点:

1、存在限制条件,当满足限制条件,不在继续。

2、每次递归调用之后越来越接近限制条件。

下面是我编程的用递归实现字符串的反转

程序代码:

#include<stdio.h>

#include<assert.h>

int my_strlen(const char *str)

{

assert(str);

int count = 0;

while (*str++)

{

count++;

}

return count;

}

void reverse_string(char *str)

{

assert(str);

char tmp = 0;

int len = my_strlen(str);


if (len > 0)

{

tmp = str[0];

str[0] = str[len - 1];

str[len - 1] = '\0';

reverse_string(str + 1);//递归的实现

str[len - 1] = tmp;

}

}

int main()

{

char arr[] = "abcdef";


    reverse_string(arr);

printf("%s\n", arr);

system("pause");

return 0;

}

实现一个函数实现n^k,使用递归实现

程序代码:

#include<stdio.h>

int fun(int n, int k)

{

if (k == 0)

{

n = 1;

}

else

{

n = n*fun(n, k - 1);

}

return n;

}

int main()

{

int ret = fun(2, 4);

printf("%d\n", ret);

system("pause");

return 0;

}

实现一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和

程序代码:

#include<stdio.h>

int DigitSum(int n)

{

int sum = 0;

if (n > 0)

{

sum = n%10;

n = n / 10;

n = sum + DigitSum(n);

}

return n;

}

int main()

{

int ret = DigitSum(1729); 

    printf("%d\n", ret);

system("pause");

return 0;

}

总体来说,递归就是不断的调用函数。