递归可以转换为循环,但循环无法转换为递归
递归主要有两个重要节点-关系与出口(可以理解为初值)
例如经典循环前n项的和1+2+3+4+……+n
for循环
#include <stdio.h>
int main(void)
{
int n,i;
int sum=0;
scanf("%d",&n);
while(i<=n)
{
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
while循环
#include <stdio.h>
int main(void)
{
int n,i;
int sum=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum+=i;
}
printf("%d\n",sum);
return 0;
}
递归
#include <stdio.h>
int he(int n);
int main(void)
{
int n;
scanf("%d",&n);
printf("%d\n",he(n));
return 0;
}
int he(int n)
{
if(n>1)
return he(n-1)+n;
else
return 1;
}
斐波那契数列
#include <stdio.h>
int he(int n);
int main(void)
{
int n;
scanf("%d",&n);
printf("%d\n",he(n));
return 0;
}
int he(int n)
{
if(n==1||n==2)
return 1;
else
return he(n-2)+he(n-1);
}
最大公约数
#include <stdio.h>
int gcd(int m,int n);
int main(void)
{
int m,n;
scanf("%d %d",&m,&n);
printf("%d\n",gcd(m,n));
return 0;
}
int gcd(int m,int n)
{
if(m<0||n<0)
return 0;
if(m%n==0)
return n;
else
gcd(n,m%n);
}