题目描述:
一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
题目分析:
经过7个村庄后他还剩2只鸭子,而每个村庄他卖所赶鸭子的一半又一只,设,他经过第七个村庄前有x只鸭子,则有,由此可算出经过第7个村庄前有多少只鸭子,设他在经过第i(7>i>0)个村庄前有只鸭子,则。
算法构造:
当i=0时,结束递归调用,当i>0时
故有:
If(i=0)
Cout<< “共有x只鸭子”;
Else
Returnf(x+1);
/*
作者: Key-不会挖洞的猫鼬
版本: 20170514.1.02
文件名:赶鸭子
创建时间: 2017.5.14
问题描述:一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。
这样他经过了七个村子后还剩两只鸭子,
问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
*/
#include <stdio.h>
#include "iostream"
using namespace std;
int number = 2,x,i=7;
int Number(int i)
{
if(0 == i) //当i为0时,结束递归调用
{
cout << "他出发时共赶了" << number << "只鸭子。" << endl; //当经过的村子数为0时,number为出发时的鸭子数
}
else
{
number = (number + 1 ) * 2; //计算在经过第i个村子前的鸭子数number
x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
return Number(i - 1);
}
}
int main()
{
Number(7);
}
题目描述:
角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22,
输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=16
题目分析:
当x为偶数时,,