/* 华科机试练手
* 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;
}
回溯法+递归 列举走楼梯的所有解决方案
最新推荐文章于 2024-07-18 01:47:57 发布