美文网首页
Rust语言编程实例100题-021

Rust语言编程实例100题-021

作者: L我是小学生 | 来源:发表于2021-07-08 12:28 被阅读0次

    Rust语言编程实例100题-021

    题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下,的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。请使用循环和递归两种方式解决此问题

    程序分析:采取逆向思维的方法,从后往前推断。

    1. 设x1为前一天桃子数,设x2为第二天桃子数, 则:

    x2=x1/2-1, x1=(x2+1)*2

    x3=x2/2-1, x2=(x3+1)*2

    以此类推: x前=(x后+1)*2

    1. 从第10天可以类推到第1天,是一个循环过程。

    输出格式:猴子第一天总共摘了 {}个桃子

    知识点:循环 递归

    1、循环解法:

    // 总共吃了N天
    const N: i32 = 10;
    // 第N天早上剩余的数量
    const COUNT: i32 = 1;
    
    fn main() {
        let mut i = N - 1;
        let mut xn = COUNT;
        while i > 0 {
            xn = (xn + 1) * 2;
            i -= 1;
        }
    
        println!("猴子第一天总共摘了 {} 个桃子", xn);
    }
    
    

    程序执行结果:

    猴子第一天总共摘了 1534 个桃子
    
    Process finished with exit code 0
    

    2、递归解法:

    // 总共吃了N天
    const N: i32 = 10;
    // 第N天早上剩余的数量
    const COUNT: i32 = 1;
    
    fn main() {
        let pc = peach(1);
        println!("猴子第一天总共摘了 {} 个桃子", pc);
    }
    
    /// 递归求解总共摘了多少桃子
    /// 遇到第N天,则返回第N天剩余的数量
    fn peach(day: i32) -> i32 {
        if day == N {
            return COUNT;
        }
        return (peach(day + 1) + 1) * 2;
    }
    

    程序执行结果:

    猴子第一天总共摘了 1534 个桃子
    
    Process finished with exit code 0
    

    相关文章

      网友评论

          本文标题:Rust语言编程实例100题-021

          本文链接:https://www.haomeiwen.com/subject/vuzzultx.html