c语言角谷定理递归,【C++】(递归+非递归)卖鸭子及角谷定理+递归模型+递归树...

ps:全文中如果有任何错误您看到并能指出来的话(尤其是递归树)感激不尽XDDDD

每个问题包含:

(1)题目描述(2)递归解决代码(3)非递归解决代码(4)递归模型(5)递归树(6)运行结果截图

一、卖鸭子问题

1.题目描述

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

2.递归解决代码(解释见代码)

/*

@Author:Innocence

@IDE:dev C++

@OS:win10

@Time:2019/5/30

@Edition:1.0

@Description:【递归解决】已知剩下的鸭子和卖鸭子的规则求一开始的鸭子数及每个村庄卖的鸭子

*/

#includeusing namespace std;

int sale(int left_duck,int flag)

{ // 倒推过程

int sale_duck=(left_duck+1)*2-left_duck; // 卖出的鸭子数=(剩下的鸭子数+1)*2[即原本的鸭子数]-剩下的鸭子数

int duck=sale_duck+left_duck; // 原本的鸭子数=剩下的+卖出的

flag-=1; // 因为是倒推所以村落数递减

if(flag<0) // 递归出口。且不能等于0,因为一开始就减一了,如果等于0实际相当于只去了6个村子

{

return left_duck; // 返回此时鸭子数,即最开始的鸭子数

}

else

{

cout<

3.非递归解决代码(解释见代码)

/*

@Author:Innocence

@IDE:dev C++

@OS:win10

@Time:2019/5/30

@Edition:1.0

@Description:【非递归解决】用for循环代替递归

*/

#includeusing namespace std;

int sale(int left_duck)

{ // 倒推过程

int duck=(left_duck+1)*2; // 原本的鸭子数=剩下的+卖出的

return duck;

}

int main()

{

int duck=0; // 原本的鸭子数

int left_duck=2; // 最后剩下的鸭子数

int sale_duck=0; // 卖掉的鸭子数

for(int i=1;i<=7;i++)

{

duck=sale(left_duck); // 这个村庄此时的鸭子数

sale_duck=duck-left_duck; // 卖出的鸭子数=原本的鸭子数-剩下的鸭子数

left_duck=duck; // 经过这个村庄后剩下的鸭子数等于此时的鸭子数

cout<

4.递归模型

【模板】

递归函数(){ 1、递归的出口; 2、递归调用 3、递归的本级处 }

【此题的递归模型】

递归函数:int sale(int left_duck,int flag) { 1.递归的出口:flag<0  2.递归调用、递归的本级处  duck=sale(duck,flag); }

5.递归树

615101418561b999f86d544bd6cff4d7.png

6.运行结果

88c1ad8a536794d39ab5ee463f99847f.png

二、角谷定理

1.题目描述

输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。

如:输入22,

输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1       STEP=16

2.递归解决代码(解释见代码)

/*

@Author:Innocence

@IDE:dev C++

@OS:win10

@Time:2019/5/30

@Edition:1.0

@Description:【递归解决】角谷定理的应用

*/

#includeusing namespace std;

//角谷定理函数

int Theorem(int num,int step)

{

if(num==1)

return step; // 返回执行的步数

if(num%2==0)

{

num=num/2; // 是偶数就除以2

cout< "num; //输入一个整数

cout<

3.非递归解决代码(解释见代码)

/*

@Author:Innocence

@IDE:dev C++

@OS:win10

@Time:2019/5/30

@Edition:1.0

@Description:【非递归解决】实际就用一个while循环代替递归 角谷定理的应用

*/

#includeusing namespace std;

int main()

{

int num;

int step=1;

cout<>num; //输入一个整数

cout

4.递归模型

【模板】

递归函数(){ 1、递归的出口; 2、递归调用 3、递归的本级处 }

【此题的递归模型】

递归函数:int Theorem(int num,int step) { 1.递归的出口:num==1  2.递归调用、递归的本级处  num=Theorem(num,step);}

5.递归树

fb94f155737dfe46973772c8f2eacf02.png

6.运行结果

949f8aae4c136b86de695957b6def792.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/417130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2325):angular之添加新组件

app.component.html <div style"text-align:center"><h1>welcome to {{title}}</h1><div style"color:#f00000">我是歌谣</div><div>{{name}}</div> </div>app.component.ts import { Component } from…

【批处理】shift用法举例

1 echo off 2 set sum03 call :sub sum 1 2 3 44 echo sum%sum%5 pause6 7 :sub8 set /a %1%1%29 shift /2 10 if not "%2""" goto sub 11 goto :eof View Code转载于:https://www.cnblogs.com/xiongjiawei/p/6564958.html

C语言给出任意4个数算24点,讨论24点算法。

讨论24点算法。24点是扑克牌游戏 玩法是&#xff1a;从一副扑克的A到10里随意抽出4张牌用‘加’’减‘‘乘’‘除’四个符号算出4个数是否等于24&#xff0c;是的话成功&#xff0c;否的话失败&#xff1b;我用的是穷举法&#xff01;(源码有点长)就是穷举出所有可能的算术式&a…

前端学习(2326):angular之用户输入数据

test1.component.html <p class"p1">test1 works!</p> <div (click)"clickDemo()" >我是div1的内容</div> <input (keyup)"onkey($event)" type"text">test1.component.spec.ts import { ComponentF…

项目被os x占用

xattr -d com.apple.FinderInfo 空格后拖入项目回车就行了转载于:https://www.cnblogs.com/EnzoDin/p/6565549.html

c语言编写pdf,编写并运行C语言程序.pdf

VC6.0 使用教程 &#xff1a;从 VC6.0安装到运行和调试 【详解版】VisualC6.0 简称 VC或者 VC6.0 &#xff0c;是微软推出的一款 C和 C编译器 &#xff0c;具有强大的可视化开发功能和调试功能。VC6.0是使用最多的版本 &#xff0c;非常经典 &#xff0c;很多高校将 VC6.0作为C…

前端学习(2327):angular之双向绑定

test1.component.html <p class"p1">test1 works!</p> <div (click)"clickDemo()" >我是div1的内容</div> <input (keyup)"onkey($event)" type"text"><form action"" #heroFrom"n…

android开发入门

下载ADT-17.0.0.zip打开eclipse->help->install new software将ADT-17.0.0.zip拖动到框中&#xff0c;去掉下面第一个和第四个复选框&#xff08;需要连接网络获取新版本信息&#xff09;下一步……ADT中下载各个版本的android系统模拟包安装好后重启File->New->An…

mysql主键异常(冲突)

抛出异常&#xff1a;detached entity passed to persist: org.booking.entity.Admin 这个时候你做session.save()添加&#xff0c;entityManager.persist()添加也好&#xff0c;你都不能添加成功。 解决方法&#xff1a;因为mysql有自增长的属性&#xff0c;并且实体也设置自增…

c语言去除图像斑点,武汉理工-图像检测与处理技术-实验报告.doc

学生学号 0121304940834实验课成绩学 生 实 验 报 告 书实验课程名称图像检测与处理技术开 课 学 院机电工程学院指导教师姓名刘清元学 生 姓 名李勇学生专业班级测控13042015--2016学年第2学期实验教学管理基本规范实验是培养学生动手能力、分析解决问题能力的重要环节&#x…

前端学习(2328):angular之模板

test2.component.html <p>test2 works!</p> <a href"{{url}}">百度</a> <a [href]"url">百度2</a>test1.component.spec.ts import { ComponentFixture, TestBed } from angular/core/testing;import { Test2Compon…

Struts2学习总结(完整版)

Struts2学习总结&#xff08;完整版&#xff09; 一、搭建struts2环境 1、jar包的导入 主要是到 解压其中的一个工程&#xff0c;得到里面lib下包含的jar包 把这里的所有的jar包拷贝到项目的 WEB-INF目录下的lib文件夹下面。 2、配置struts.xml文件 注意&#xff1a;必须要放在…

打开word时出现“在加载ThisDocument时出现错误”

有可能软件兼容性不行或者就是安装时没有安装正版软件&#xff0c;有些模块没有加载进去就无法打开文件现在有office 2007 建议保存的时候保存成97-03兼容模式

w ndows10电脑配置看哪里,Windows10怎么自动登录?Windows10自动登录的设置方法

在Windows10系统的默认状态下&#xff0c;我们登录系统是需要输入密码的&#xff0c;虽然输入登录密码可以较好的保护系统的安全&#xff0c;但是确实麻烦了不少&#xff0c;因此很多用户想要设置Windows10自动登录&#xff0c;那么该如何操作呢&#xff1f;下面小编给大家介绍…

联想电脑g470 vs2010很卡 问题解决

联想电脑g470 vs2010很卡&#xff0c;尤其是aspx设计器&#xff0c;根本都输入不了文字。 解决办法在桌面右键&#xff0c;显示卡属性&#xff0c;电源&#xff0c;可切换显示卡方式&#xff0c;选择手动或根据电源选择图形处理器&#xff0c;最后点应用…等几秒在看下效果

前端学习(2329):angular之路由

app.component.css .us{color: red; } .active{color: aquamarine; }app.component.js <div style"text-align:center"><h1>welcome to {{title}}</h1><div style"color:#f00000">我是歌谣</div><div>{{name}}</…

做一个常规的banner图——负边距的使用、banner图的拼法

在这之前&#xff0c;首先要了解如何设置块级元素在块级元素水平居中 方法&#xff1a; 设置子容器为定位元素水平居中 left&#xff1a;50%&#xff1b;margin-left&#xff1a;-width/2&#xff1b;垂直居中 top&#xff1a;50%&#xff1b;margin-top&#xff1a;-width/2&a…

C语言1094题目,P1094 (C语言代码)

解题思路:砍成1X1的单位方块&#xff0c;需要n*m-1刀。如果说&#xff0c;横、纵方向的每一刀的代价都一样的话。那很简单&#xff0c;n方向最少砍n-1刀&#xff0c;同理m方向最少要砍m-1刀&#xff0c;(自己画图看看)。那么剩余的那几刀分给代价最少的去砍&#xff0c;min(n-1…