题目1:给你一个数N(2<<N<<10000), 按下面格式打印出来:
例如是10:10=9+1, 10=8+2,10=8+1+1, 10=7+3,10=7+2+1,10=7+1+1+1,。。。。
10=1+1+1+1+1+1+1+1+1+1
分析:
n=2 时, 打印出 2=1+1 记为 P(2)
n=3时, 打印出 3 =2+1
3=1+2 3=1+P(2)
n=4时, 打印出 4=3+1
4=2+2 4=2+P(2)
4=1+3 4=1+P(3)
………………
用数组stack[]来模拟一个栈,stab来标记此次递归可以使用的栈底,
#include"stdio.h"
#include"stdlib.h"
#define N 6
int stack[10000];
void PrintPlus(int n, int stab) //from stack[stab] space are available for this cursive
{
int p = stab;
int i,j;
if(n < 2)
return;
if(n > 10000)
{
printf("Too big!!");
return;
}
for(i=n-1; i>0; i--)
{
stack[p++] = i;
stack[p] = n - i;
printf("%d = %d", N, stack[0]);
for(j=1; j<=p; j++)
{
printf(" + %d", stack[j]);
}
printf("/n");
PrintPlus(stack[p], p);
p = stab;
}
return;
}
int main()
{
int n = N;
int stab = 0;
PrintPlus(n, stab);
return 0;
}