递归有两个特点:
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;
}
总体来说,递归就是不断的调用函数。
转载于:https://blog.51cto.com/mnt3918290/1710857