经典算法-递归
一、递归,就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
下体展现了递归的过程:
接下来通过一个例子来实现递归:
递归实现十进制到二进制的转换:
代码:
#include <stdio.h>
#include <string.h>
void convto(char *s,int n,int b)
{
char bit[]={"0123456789"};
int len;
if(n==0)
{
strcpy(s,"");
return;//该return实现的是当n=0时跳出最内层递归,实现往下循环的目的,接下来执行len=strlen(s);
}
convto(s,n/b,b);
len=strlen(s);
s[len]=bit[n%b];
s[len+1]='\0';结束标识符
}
void main(void)
{
char s[80];
int i,base,old;
printf("请输入十进制数:");
scanf("%d",&old);
printf("请输入要转换的进制:");
scanf("%d",&base);
convto(s,old,base);
printf("%s\n",s);
return;
}
#include <string.h>
void convto(char *s,int n,int b)
{
char bit[]={"0123456789"};
int len;
if(n==0)
{
strcpy(s,"");
return;//该return实现的是当n=0时跳出最内层递归,实现往下循环的目的,接下来执行len=strlen(s);
}
convto(s,n/b,b);
len=strlen(s);
s[len]=bit[n%b];
s[len+1]='\0';结束标识符
}
void main(void)
{
char s[80];
int i,base,old;
printf("请输入十进制数:");
scanf("%d",&old);
printf("请输入要转换的进制:");
scanf("%d",&base);
convto(s,old,base);
printf("%s\n",s);
return;
}