前言:此題由 艾菇 提供,感謝給力支援。
- #include<stdio.h>
- void walk(int step,int remain,int *list,int idx){
- /*step 現在要走一步還是兩步
- remain 現在剩下幾步
- list 紀錄這次要走幾步
- idx 紀錄這次是第幾次移動
- */
- int i;
- int n_remain = remain - step; //下次會剩下幾步
-
- *(list + idx) = step; //紀錄這次要走幾步
-
- if(n_remain == 0){ //要走到終點了
- for(i=0 ; i <= idx ; i++){ //將紀錄的步數輸出
- printf("%d",list[i]);
- }
- printf("\n");
- }else if(n_remain>0){
- idx++; //紀錄增加一次移動
-
- walk(1,n_remain,list,idx);
- walk(2,n_remain,list,idx);
- }else{ //n_remain為負,不合理的情況
- return;
- }
- }
- int main(void){
- int dis;
-
- printf("輸出總距離: ");
- scanf("%d",&dis);
-
- int list[dis];
-
- walk(1,dis,list,0);
- walk(2,dis,list,0);
- }
複製代碼 |