目录:
1.什么是递归?
递归就是自己调用自己,一个过程或函数在其定义或说明中直接或间接调用自身的一种方法,其主要思想:大事化小;
2.递归的两个必要条件
1.存在限制条件,当满足这个限制条件的时候,递归便不再继续;
2.每次递归调用之后越来越接近这个限制条件;
3.例题
(1)接受一个整数值,按顺序打印他的每一位(eg:输入1234;输出1 2 3 4)
#include<stdio.h>
void Printf(int num)
{
if (num > 9)
{
Printf(num / 10);
}
printf("%d ",num % 10);
}
int main()
{
int a;
scanf_s("%d", &a);
Printf(a);
printf("\n");
return 0;
}
或
#include<stdio.h>
void Printf(int num)
{
if (num == 0)
{
return;
}
Printf(num / 10);
printf("%d ",num % 10); //后打印
}
int main()
{
int a;
scanf_s("%d", &a);
Printf(a);
printf("\n");
return 0;
}
(2)不用循环实现1+2+3+…+n
#include<stdio.h>
int Add(int x)
{
if (x == 1)
{
return 1;
}
//f(n)=f(n-1)+n
return Add(x - 1) + x; //Add(2)+3=Add(1)+2+3
}
int main()
{
int a = 3;
printf("%d\n", Add(a));
return 0;
}
(3)斐波那契数列(从第三个数开始,每个数等于前两个数之和)
即:f(n)=f(n-1)+f(n-2))//n>=2
a.用递归做法
#include<stdio.h>
int fib(int n)
{
if (n < 2)
{
return n;
}
return fib(n - 1) + fib(n - 2);
}
int main()
{
int x = 10;
printf("%d\n", fib(x));
return 0;
}
b.用循环做法
#include<stdio.h>
unsigned long long fib1(int n)
{
if (n < 2)
{
return n;
}
int f0 = 0, f1 = 1, f2;
int i = 2;
while (i <= n) //i等于几算的是第几项
{
f2 = f1 + f0;
f0 = f1;
f1 = f2;
++i;
}
return f2;
}
int main()
{
int x = 10;
printf("%lld\n", fib1(x));
return 0;
}