回溯法+递归 列举走楼梯的所有解决方案

来源:互联网 发布: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;}