/*
**题目:上楼梯,一次可以走一个台阶或者两个台阶,列举走n个台阶的所有可能的走法
**解法:使用递归方法,一次走一个或者两个台阶,因此可以将n个台阶分解为(1,n-1)或者(2,n-2)
*/

 

 
  

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. static int num=1; 
  4. /* 
  5. ** @path: 前len步的走法路径 
  6. ** @len:  已经走了len步 
  7. ** @n:    还剩n个台阶 
  8. */ 
  9. void allpath(int *path, int len, int n) 
  10.     if(n==0) //n为0时打印可以走的路径,递归返回 
  11.         { 
  12.                 printf("*************第 % d 种方法是**********",num++); 
  13.                 for(int i=0;i<len;i++) 
  14.                         printf("%d        ",*(path+i)); 
  15.                 printf("\n"); 
  16.                 return
  17.         } 
  18.         if(n>=1) 
  19.         { 
  20.                 *(path+len)=1; 
  21.                 allpath(path,len+1,n-1); 
  22.         } 
  23.         if(n>=2) 
  24.         { 
  25.                 *(path+len)=2; 
  26.                 allpath(path,len+1,n-2); 
  27.         } 
  28.  } 
  29.   
  30. void main() 
  31.         int n; 
  32.         scanf("%d",&n); 
  33.         int *path=(int *)malloc(n*sizeof(int)); 
  34.         allpath(path,0,n); 
  35.         free(path);