参考b站视频 BV1ty4y117go
1、递归打印0-9的数字
#include<stdio.h>
int f(int begin,int last)
{
if(begin>last) return 0; \\注意循环结束条件
printf("%d\n",begin);
f(begin+1,last);
}
int main()
{
f(0,9);
}
代码运行结果
2、数组之和
#include<stdio.h>
#include<string.h>
int add(int a[],int len)//循环
{
int x=0;
for(int i=0;i<len;i++)
{
x+=a[i];
}
return x;
}
/*
* 1、a[begin]+(begin+1------end)
* 2、(a[0]...end-1)+a[end]
* 3、折半求和 mid = (begin+end)/2 [begin,mid) (mid,end]
*/
int f(int a[],int begin,int len)//递归
{
if(begin==len) return 0;
int x;
x=f(a,begin+1,len);
return x+a[begin];
}
int main()
{
int a[]={
2,5,3,9,12,7};
//int sum=add(a,len);
int length=sizeof(a)/sizeof(a[0]);
int sum=f(a,0,length);
printf("%d",sum);
}
3、在n个球中,任意取m个,有多少种取法
#include<stdio.h>
int f(int n,int m)
{
if(n<m) return 0;
if(n==m) return 1;
if(m==0) return 1;
return f(n-1,m-1)+f(n-1,m);
}
int main()
{
int k=f(5,3);
printf("%d",k);
}
4、求n个元素的全排列
#include<stdio.h>
#include<string.h>
int f(char data[],int k,int len)
{
if(k==len)
{
for(int i=0;i<len;i++)
{
printf("%c ",data[i]);
}
printf("\n");
}
for(int i=k;i<len;i++)
{
{
char t=data[k];
data[k]=data[i];
data[i]=t;
}
f(data,k+1,len);
{
char t=data[k];
data[k]=data[i];
data[i]=t;
}
}
}
int main()
{
char data[]="ABC";
int len=strlen(data);
//scanf("%d",&k);
f(data,0,len);
}