1 递归定义
函数自己调用自己的过程,称为递归。
2 递归的必要条件
- 1.必须要有终止条件。达到条件就停止递归,退出函数。
- 2.每次调用自己都要越来越接近这个终止条件。
因此写函数的时候,也分两部分
第一部分:写终止条件,以及需要返回的结果,或者说要执行的代码。
第二部分:写执行调用自己(递归)条件,该条件下通常要改变参数,需要让参数越来越接近终止条件。
3 例子
(1)写一个递归函数,计算n!
#include <stdio.h>
int func(int n)
{
if(n<=1)
{
return 1;
}
else
{
return n*func(n-1);
}
}
int main()
{
func(3);
return 0;
}
(2)递归法求 斐波那契数列第n个数的值
1,2,3,5,8,13...
int func(int n)
{
if (n == 1 || n == 2)//终止条件
return 1;
else //执行递归的条件 (n>2)
{
return func(n - 1) + func(n - 2);
}
}
int main()
{
int res = func(6);
printf("%d", res);
return 0;
}
(3)求一个数的每位数字之和
//递归实现 求数字n的每一位之和,例如1234,输出10
//1234->4+digitsum(123);
//123->3+digitsum(12);
//12->2+digitsum(1);个位数就返回他自己
int digitSum(unsigned int n)
{
if (n <= 9)
return n;
else
{
return n % 10 + digitSum(n/10);
}
}
int main()
{
unsigned int num = 0;
scanf("%d", &num);
int sum = digitSum(num);
printf("%d\n", sum);
return 0;
}
(4)递归法求n的k次方
//递归法计算n的k次方
//result = n * n^k-1
//即result = n * func(n, k-1)
double func(int n, int k)
{
if (k == 0) //终止条件
return 1;
//执行递归的条件
else if (k > 0)
{
return n * func(n, k - 1);
}
else
{
return 1.0 / func(n, -k);
}
}
int main()
{
int n = 0;
int k = 0;
printf("先输入数字,再输入次方\n");
scanf("%d %d", &n, &k);
double res = func(n, k);
printf("%lf\n", res);
return 0;
}