递归求解——n个台阶,每次只能上1或2个台阶,请问有多少种方法走完这n个台阶

举报
悲恋花丶无心之人 发表于 2021/02/03 00:21:58 2021/02/03
【摘要】 算是一道比较简单的小学奥数题了,主要是为了展示使用递归来解决问题的方法 目录 一、思想 二、代码(Python、C++和C#,含计时) 一、思想 可以使用逆向思维思考这个问题,即求出上(n-1)个台阶和(n-2)个台阶的方法总和为上n个台阶的方法数。 二、代码(Python,C++和C#,含计时) 1.Python import time def foo...

算是一道比较简单的小学奥数题了,主要是为了展示使用递归来解决问题的方法


目录

一、思想

二、代码(Python、C++和C#,含计时)


一、思想

可以使用逆向思维思考这个问题,即求出上(n-1)个台阶和(n-2)个台阶的方法总和为上n个台阶的方法数。


二、代码(PythonC++C#,含计时

1.Python


  
  1. import time
  2. def footstep(n):
  3. if n == 1:
  4. return 1
  5. elif n == 2:
  6. return 2
  7. else:
  8. return footstep(n - 1) + footstep(n - 2)
  9. if __name__ == '__main__':
  10. start = time.time()
  11. #求解10个台阶的方法种类
  12. print(footstep(10))
  13. end = time.time()
  14. endtime = end - start
  15. print(endtime,"s")

结果


  
  1. 89
  2. 0.0019948482513427734 s
  3. Press any key to continue . . .

2.C++


  
  1. #include<iostream>
  2. #include<ctime>
  3. int footstep(int n) {
  4. if (n == 1) {
  5. return 1;
  6. }
  7. else if (n == 2) {
  8. return 2;
  9. }
  10. else{
  11. return footstep(n - 1) + footstep(n - 2);
  12. }
  13. }
  14. int main() {
  15. clock_t start = clock();
  16. std::cout << footstep(10) << std::endl;
  17. clock_t end = clock();
  18. double endtime = (double)(end - start) / CLOCKS_PER_SEC;
  19. std::cout << "Total time:" << endtime << "s" << std::endl; //s为单位
  20. //std::cout << "Total time:" << endtime * 1000 << "ms" << std::endl; //ms为单位
  21. getchar();
  22. }

结果


  
  1. 89
  2. Total time:0.001s

3.C#


  
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Diagnostics;
  7. namespace footstep_method_Csharp
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Stopwatch watch = new Stopwatch();
  14. watch.Start();//开始计时
  15. //显示斐波那契数列的第40项
  16. Console.WriteLine(footstep(10));
  17. watch.Stop();//停止计时
  18. double endtime = (watch.ElapsedMilliseconds) * 1.0 / 1000 ;
  19. Console.WriteLine("耗时:" + endtime + "s");//输出时间 毫秒
  20. //等待用户按键动作,防止程序快速结束
  21. Console.ReadKey();
  22. }
  23. public static int footstep(int n)
  24. {
  25. if (n == 1)
  26. {
  27. return 1;
  28. }
  29. else if (n == 2)
  30. {
  31. return 2;
  32. }
  33. else
  34. {
  35. return footstep(n - 1) + footstep(n - 2);
  36. }
  37. }
  38. }
  39. }

 结果


  
  1. 89
  2. 耗时:0.025s

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/89647882

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。