回溯法+递归 列举走楼梯的所有解决方案
来源:互联网 发布:js e.preventdefault 编辑:程序博客网 时间:2024/06/10 03:22
/* 华科机试练手 * N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出来。 * 测试数据: 5 输出结果 一共有8种走法 * 测试数据: 15 输出结果 一共有987种走法 * 方案 :回溯法+递归 */#include <stdlib.h>#include <stdio.h>int a[100] = {0};int n;int GoUp(int level,int step){ int i; static int ways = 0; if(step == n)//已经走到尽头 { ways++; for(i=0; i<level; i++)printf("%d\t",a[i]); printf("\n"); return; } for(i=1; i<=2; i++)//2种分枝 { if(step+i <= n)//可行 { a[level] = i;//记录解向量 //继续递归走下一步,注意递归自动隐含level和step的回溯过程!! GoUp(level+1,step+i); } } return ways;}int main(int argc, char *argv[]){ int i; n = atoi(argv[1]); i = GoUp(0,0); printf("Totally %d ways .\n",i); return 1;}