台阶问题学习笔记

        最近浏览CSDN的帖子看到了SillyBenzhu的关于列举走楼梯的解决方案,感觉挺好玩,所以试一下。

首先这个问题如果想很简单的解决就用递归法来解决,否则就用SillyBenzhu的回溯加递归的方法。

递归法

#include<stdio.h>
int f(int n)
{
    if (n <= 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n == 2)
        return 2;
    else
        return f(n-1)+f(n-2);
}
void main(){
int n;
int s=0;
printf("input numbers of step n:");  
scanf("%d",&n);  
s=f(n);
printf("%d\n",s);
}


修改SillyBenzhu的回溯+递归的方法,使之可以直接适用于Windows的VC++编译器。


/* 
 * N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出来。 
 * 测试数据: 5  输出结果 一共有8种走法 
 * 测试数据: 15 输出结果 一共有987种走法 
 * 方案 :回溯法+递归 
 */  
#include <stdlib.h>  
#include <stdio.h>  
int a[100] = {0};  
int n;
  
int GoUp(int level,int step)  
{  //level 是a[]下标,它的含义是经过多少次(一次可以走一阶或者两阶)走完楼梯(level+1) 
	//step 是台阶计数 ways 是多少条路径
    int i;  
    static int ways = 0;  
    if(step == n)//已经走到尽头  
    {  
        ways++;  
        for(i=0; i<level; i++)printf("%d\t",a[i]);  //一个a[]数组是一种爬楼梯方式
        printf("\n");  
        return ways;  
    }  
    for(i=1; i<=2; i++)//2种分支,代表该次走一阶或者两阶
    {  
        if(step+i <= n)//判断该次走i阶是否可行
        {  
            a[level] = i;//记录解向量  
            //继续递归走下一步,注意递归自动隐含level和step的回溯过程!!  
            GoUp(level+1,step+i);  
        }  
    }  
    return ways;  
}  
int main()  
{  
    int i;  
	
   printf("input numbers of step n:");
    scanf("%d",&n);
    i = GoUp(0,0);  
    printf("Totally %d ways .\n",i);  
    return 1;  
}  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MATLAB时,编写学习笔记是一种很好的方法,可以帮助您记录重要的概念、语法和技巧,以及解决问题的步骤。以下是一些关于编写MATLAB学习笔记的建议: 1. 组织结构:使用清晰的标题和分节来组织您的学习笔记。将不同的主题分成单独的部分,并使用子标题来进一步细分内容。 2. 内容概要:在每个部分或子标题下,写下该主题的概要。这样可以帮助您回顾和理解该主题的关键点。 3. 示例代码和输出:对于每个主题,包括一些示例代码和相应的输出结果。这有助于您理解和演示具体的MATLAB语法和功能。 4. 问题与解答:如果您在学习过程中遇到了一些困惑或问题,将其记录下来,并在笔记中提出并解答这些问题。这样可以帮助您深入思考并加深对该主题的理解。 5. 笔记补充:除了基本概念和语法外,您还可以添加一些额外的笔记,如最佳实践、编程技巧、常见错误等。这些额外的笔记可以提供更多的实用信息和提示。 6. 参考资料:在您的学习笔记中,包括引用的参考资料,如教程、文档、书籍或网站链接。这样,您可以随时回顾并深入研究相关的主题。 7. 总结和复习:在学习笔记的结尾,添加一个总结部分,回顾和总结您学到的重点和关键概念。此外,定期复习您的学习笔记也是加深理解和记忆的好方法。 以上是关于编写MATLAB学习笔记的一些建议。希望这对您有所帮助,并祝您在MATLAB学习过程中取得成功!如果有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值