小兔跳台阶——递归算法题解

我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

题目背景

新年伊始,在刷leetcode中途,一直在联想着与兔年相关的话题,在联想到兔子的一蹦一跳后,出现了这样的一道题目————

题目

Description

小兔跳台阶——

假如有n个台阶,小兔子每次只能跳上去1个台阶或2个台阶,请问跳到第n个台阶有几种走法?
为便于读者理解题意,这里举例说明如下:

假如有3个台阶,那么总计就有3种走法:第一种为每次上1个台阶,上3次;第二种为先上2个台阶,再上1个台阶;第三种为先上1个台阶,再上2个台阶。输入为n,输出为走到第n个台阶有几种走法

Input

比如输入是3

Output

如果输入是3,走到第3个台阶的走法总计有3种,1,1,1 和 1,2 和2,1,输出为3

Sample Input 1

4

Sample Output 1

5

题解:

#include <stdio.h>

int step(int n){
    if(1 == n){
        return 1;
    }
    if(2 == n){
        return 2;
    }
    return step(n - 1)+ step(n - 2);
}
int main() {
    int n, num;
    scanf("%d", &n);
    num = step(n);
    printf("%d", num);
    return 0;
}
  • 我们把函数自身调用自身的操作,称为递归函数
  • 递归函数一定要有结束条件,否则会产生死循环!
  • 使用递归在解决一些问题时,可以让问题变得简单,降低编程的难度
  • 关键点是找到解决该问题的公式——例如 step(n) = step(n - 1)+ step(n - 2);
  • 递归核心: 找公式+结束条件

小tips

在C++的学习中,往往会遇到main函数调用其他函数,或者各函数互相调用的流程

  • 我们可习惯于一个程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件。
  • 对于较大的程序,通常将程序内容分别放在若干源文件中,再由若干源程序文件组成一个程序.这样处理便于分别编写、分别编译,进而提高调试效率(复试有用)。一个源程序文件可以为多个程序共用。
  • 且所有函数都是平行的,即在定义函数时是分别进行的,并且是互相独立的。
  • 一个函数并不从属于另一函数,即函数不能嵌套定义.函数间可以互相调用,但不能调用main函数。main 函数是由系统调用的,例如 main 函数中调用print_message 函数,而 print_message函数中又调用printstar函数,我们把这种调用称为嵌套调用.
posted @ 2023-01-11 21:12  Luciferpluto  阅读(3)  评论(0)    收藏  举报  来源