/*
**题目:上楼梯,一次可以走一个台阶或者两个台阶,列举走n个台阶的所有可能的走法
**解法:使用递归方法,一次走一个或者两个台阶,因此可以将n个台阶分解为(1,n-1)或者(2,n-2)
*/
-
- #include <stdio.h>
- #include <stdlib.h>
- static int num=1;
- /*
- ** @path: 前len步的走法路径
- ** @len: 已经走了len步
- ** @n: 还剩n个台阶
- */
- void allpath(int *path, int len, int n)
- {
- if(n==0) //n为0时打印可以走的路径,递归返回
- {
- printf("*************第 % d 种方法是**********",num++);
- for(int i=0;i<len;i++)
- printf("%d ",*(path+i));
- printf("\n");
- return;
- }
- if(n>=1)
- {
- *(path+len)=1;
- allpath(path,len+1,n-1);
- }
- if(n>=2)
- {
- *(path+len)=2;
- allpath(path,len+1,n-2);
- }
- }
- void main()
- {
- int n;
- scanf("%d",&n);
- int *path=(int *)malloc(n*sizeof(int));
- allpath(path,0,n);
- free(path);
- }
转载于:https://blog.51cto.com/lynsa/467643