1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。 这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?2.角谷定理。

本文通过两个实例介绍递归程序设计:一是解决赶鸭子售卖的问题,经过7个村子后剩2只鸭子,求初始鸭子数;二是阐述角谷定理,通过递归计算自然数变换到1所需的步骤。文章通过分析、算法构造、调试和经验总结,详细解析了递归应用和避免常见错误的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 递归程序设计
  • 题目分析

1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。

这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

 

递归出口:经过的村子数为0

递归体:剩余的鸭子数目加以乘以2

2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

如:输入22,

输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1

STEP=16

 

递归出口:自然数变为1

递归体:若为偶数,则把它除以2,若为奇数,则把它乘以31

 

  • 算法构造    

1. while (vil_num > 0)

    {

        return Duck_number1((count+1)*2,vil_num-1);

    }

    return count; //直接返回鸭子总数

2. while (number != 1) {

        //偶数除以2奇数乘以3加1

        if (number % 2 == 0){

             number /= 2;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值