递归求鸭子数

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

 

/*
File name:duck.cpp
Author:杨柳
Date:2017/5/23
IDE:DEV-c++ 
*/
/*
递归函数:
f(n)={  0  n=7
        f(n+1)*2+2  n<7  (因为:f(n)-(f(n)/2+1)=f(n+1))
	}
其中n为经过的村子数,f(n)为经过n村子所剩下的鸭子数 
*/
#include<iostream>
using namespace std;
//经过第几个村子所剩余的鸭子数,故总的鸭子数为第0个村子所剩余的鸭子数 
int leftduck(int n){   // n为经过的村子数
	if(n==7)
    	return 2-(2/2+1);//第七个村庄剩余0只 
    else
        return (leftduck(n+1)*2)+2;
}
//计算经过每个村子卖出的鸭子数 
int sellduck(void) {
	int i=7;
	for(i;i>0;i--){
		cout<<"第"<<i<<"村庄卖出鸭子数为:"<<(leftduck(i-1)/2+1)<<endl;//卖出数为前一个村庄剩余数除2加1 
//	cout<<"第"<<i<<"村庄剩余鸭子数为:"<<leftduck(i)<<endl;
	}
	return 0;
} 
int main(){
	cout<<"出发时共赶鸭子为:"<<leftduck(0)<<endl;
	sellduck();	
} 
#include<iostream>
using namespace std;
//经过第几个村子所剩余的鸭子数,故总的鸭子数为第0个村子所剩余的鸭子数 
int leftduck(int n){   // n为经过的村子数
	if(n==7)
    	return 2-(2/2+1);//第七个村庄剩余0只 
    else
        return (leftduck(n+1)*2)+2;
}
//计算经过每个村子卖出的鸭子数 
int sellduck(void) {
	int i=7;
	for(i;i>0;i--){
		cout<<"第"<<i<<"村庄卖出鸭子数为:"<<(leftduck(i-1)/2+1)<<endl;//卖出数为前一个村庄剩余数除2加1 
//	cout<<"第"<<i<<"村庄剩余鸭子数为:"<<leftduck(i)<<endl;
	}
	return 0;
} 
int main(){
	cout<<"出发时共赶鸭子为:"<<leftduck(0)<<endl;
	sellduck();	
} 
 
<span style="color:#ff9900"><img data-cke-saved-src="https://img-blog.csdn.net/20170517191708283?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2xpdV93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" src="https://img-blog.csdn.net/20170517191708283?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2xpdV93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span>

 

 

 

 

 
 
 
 
 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值