递归实际例子解析

本文通过四个具体的实例详细解析了递归算法的应用,包括卖鸭子问题、角谷定理、电话号码字符组合和分桔子问题。每个问题都提供了详细的分析和递归算法构造,帮助理解递归函数的逻辑和应用。

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

题目描述:

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

题目分析:

经过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为偶数时,,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值