(二十三)王道机试指南___递归、递归的应用

算例一【汉诺塔III (九度OJ 1458)】

  • 题目描述

  • 解题思路

假设第一根杆上有K个盘,由于转移过程一定要经过第二个杆,所以可以分为以下步骤:

①将第一根杆上的顶部K-1个盘移动至第三根杆   F[K-1]

②此时第一根杆还剩最大的盘,将其移动至第二根杆   1

③将第三根杆上的K-1个盘移动至第一根杆   F[K-1]

④将第二根杆上的最大盘移动至第三根杆   1

⑤将第一根杆上的K-1个盘移动到第三根杆   F[K-1]

所以总的来说,F[K]=3*F[K-1]+2

  • 解题代码

#include <stdio.h>
#include <string.h>
Long long F (int num) { //递归函数,返回值较大使用long long类型
    if (num == 1) return 2; //当参数为1时直接返回2
    else
        return 3 * F(num - 1) + 2; //否则递归调用F(num-1)
}
int main () {
    int n;
        while (scanf ("%d" ,& n) != EOF ) { //输入
        printf ( "%lld\n" ,F(n)); //输出
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值