每日一题:用c语言解决递归问题:一个人上台阶,一次可上一个阶梯或两个,问这个人上十个阶梯有多少种走法?

本文详细阐述了一个人上台阶问题的递归算法实现,通过代码展示了如何使用递归解决走法问题,包括结束条件的设置和递归关系的理解。
摘要由CSDN通过智能技术生成

目录

一、问题描述

二、实现代码

三、运行结果

四、代码分析


 一、问题描述

一个人上台阶,一次可上一个阶梯或两个,问这个人上十个阶梯有多少种走法?

二、实现代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  

int step(int n);
int main() {
	//经典递归问题详解(跳台阶)
	int n;
	printf("请输入需要上几个台阶:");
	scanf("%d", &n);
	printf("上%d个台阶有%d种走法",n,step(n));
	return 0;
}
int step(int n) {
	//2.一定要有结束条件
	if (n == 1 || n == 2) {
		return n;
	}
	//1.找到最后要求的与它前一步或几步的关系
	return n=step(n-1)+step(n-2);
 }

三、运行结果

四、代码剖析

 1.主要运用递归思想:

  (1)写递归函数的核心:①找公式,②写结束条件

  (2)本题中公式为 n=step(n-1)+step(n-2),就是找f(n)与他前一个f(n-1)或前几个f(n-?)的关系。结束条件:递归函数必须有一个或多个终止条件,这些条件定义了递归何时停止。如果没有终止条件,递归函数将无限期地调用自身,导致栈溢出错误。本题的结束条件为

        if (n == 1 || n == 2) {
                return n;
            }

2.本题分析思路:

f(n) = f(n-1) + f(n-2).
如果我们第一部选1个台阶,那么后面就会剩下n-1个台阶,也就是会有f(n-1)种走法.如果我们第一部选2个台阶,后面会有f(n-2)个台阶.因此,对于n个台阶来说,就会有f(n-1) + f(n-2)种走法.
因此,1个台阶f(1) = 1.
f(2) = 2,
f(3) = 3
f(4) = 5
f(5) = 8
f(6) = 13
f(7) = 21
f(8) = 34
f(9) = 55
f(10) = 89
f(11) = 89+55 = 144
f(12) = 144 + 89 = 233
.....
3.这类题可这样理解:
假设走到第n阶有f(n)种走法,走到第n+1阶有f(n+1)种走法;
则走到第n+2阶,则可分成两种情况:
一,最后一步是从第n阶直接登两级到第n+2阶
二,最后一步是从第n+1阶直接登一级到第n+2阶
由于从地面到第n阶,和到第n+1阶的走法已经知道
故从地面到第n+2阶的走法:
f(n+2)=f(n)+f(n+1)
n=1时,1种走法
n=2时,2种走法
n=3时,1+2=3种走法
n=3时,2+3=5种走法


结束~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值