Rust语言编程实例100题-021
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下,的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。请使用循环和递归两种方式解决此问题。
程序分析:采取逆向思维的方法,从后往前推断。
- 设x1为前一天桃子数,设x2为第二天桃子数, 则:
x2=x1/2-1, x1=(x2+1)*2
x3=x2/2-1, x2=(x3+1)*2
以此类推: x前=(x后+1)*2
- 从第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
网友评论