- 字符串反转
#include <stdio.h>
#include <string.h>
void ReverseString(char *p)
{
int length = strlen(p);
if(length <= 1)
{
return;
}
else
{
char tmp = p[0];
p[0] = p[length-1];
p[length-1] = '\0';
ReverseString(p+1);
p[length-1] = tmp;
}
}
int main()
{
char p[] = "abcd";
ReverseString(p);
printf("%s\n", p);
return 0;
}
- 组合问题
#include <stdio.h>
int f(int m, int n)
{
if(m == 0 || n == 0)
{
return 1;
}
return f(m-1, n) + f(m, n-1);
}
int main()
{
printf("%d\n", f(3, 1));
return 0;
}
- 杨辉三角
#include <stdio.h>
int f(int m, int n)
{
if(n == 0)
{
return 1;
}
if(m == n)
{
return 1;
}
return f(m-1, n) + f(m-1, n-1);
}
int main()
{
int leval = 5;
for(int i=0; i<=leval; i++)
{
printf("%d ", f(leval, i));
}
printf("\n");
return 0;
}
- 整数划分问题
#include <stdio.h>
#define MAXSIZE 1024
void f(int n, int arr[], int cur)
{
if(n<=0)
{
for(int i=0; i<cur; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return;
}
for(int i=n; i>0; i--)
{
if(cur>0 && i>arr[cur-1])
{
continue;
}
arr[cur] = i;
f(n-i, arr, cur+1);
}
}
int main()
{
int arr[MAXSIZE] = {0};
f(6, arr, 0);
return 0;
}