C基础之递归(思想很重要,学会找规律)
递归思想的条件:1.函数自己调用自己 2.函数必须有一个固定的返回值(如果没有这个条件会发生死循环)
----规律很重要
简单递归题目一:
设计一个函数计算一个整数的n次方,比如2的3次方,就是8
步骤:
1.定义方法,以及方法中的参数--power( int base ,int n )
2.根据定义的方法来找规律:
函数终止条件:n==0时,返回1;n<0时,返回-1;红色箭头表示函数的执行过程,蓝色箭头表示函数达到条件后开始一层一层的返回值,具体代码如下:
long power(int base, int n)
{
if (n<) return -; if (n == ) return ; // n一定>0
return power(base, n-) * base;
}
简单递归题目二:
设计一个函数,计算1+2+3+4+5+6+7+8+...+n的值
要求n必须>0
步骤:
1.定义方法,以及方法中的参数--leiJia( int n )
2.根据定义的方法来找规律:
leiJia(0)==0;
leiJia(1)==leiJia(0) + 1;
leiJia(2)==leiJia(1) + 2;
leiJia(3)==leiJia(2) + 3;
.
.
.
leiJia(n)==leiJia(n-1) + n;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
long leiJia(int n)
{
/*
// 这里的0随便
if (n<=0) return 0; // 仔细分析一下,可以发现这行代码可以省略
//if (n == 1) return 1;
return leiJia(n-1) + n;
*/ return (n<=) ? : ( leiJia(n-) + n );
}
简单递归题目三:
设计一个函数计算1!+2!+3!+……+n!的值
4! = 1 * 2 * 3 * 4;
n! = 1 * 2 *.... *n
步骤:
1.定义方法,以及方法中的参数--pidAdd(n);
2.根据定义的方法来找规律:
pidAdd(1)==1;
pidAdd(2)==pidAdd(1) + 2! ;
pidAdd(3)==pidAdd(2) + 3! ;
.
.
.
pidAdd(n)==pidAdd(n-1) + n! ;
函数终止条件:n==1时,返回1;n<0时,返回0;具体代码如下:
long pieAdd(int n)
{
if (n == ) return ;
return pieAdd(n-) * dieCheng(n);//dieCheng 函数实现的是从1*2*3*...*n
}
递归的学习不止这些,在以后的学习过程中继续整理,共同学习。
C基础之递归(思想很重要,学会找规律)的更多相关文章
- Python算法——递归思想
编程语言在构建程序时的基本操作有:内置数据类型操作.选择.循环.函数调用等,递归实际属于函数调用的一种特殊情况(函数调用自身),其数学基础是数学归纳法.递归在计算机程序设计中非常重要,是许多高级算法实 ...
- Javascript函数之深入浅出递归思想
一.递归函数的理解 1.生活中的递归 "递归"在生活中的一个典例就是"问路".如图小哥哥进入电影院后找不到自己的座位,问身边的小姐姐"这是第几排&qu ...
- 《编程简介(Java) ·10.3递归思想》
<编程简介(Java) ·10.3递归思想> 10.3.1 递归的概念 以两种方式的人:男人和女人:算法是两种:递归迭代/通知: 递归方法用自己的较简单的情形定义自己. 在数学和计算机科学 ...
- 算法基础_递归_求杨辉三角第m行第n个数字
问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...
- 十四. Python基础(14)--递归
十四. Python基础(14)--递归 1 ● 递归(recursion) 概念: recursive functions-functions that call themselves either ...
- [剑指Offer]46-把数字翻译成字符串(递归思想,循环实现)
题意 '0'到'25'翻译成'a'到'z',故一个字符串可以有多种翻译方式,如12258有五种翻译方式. 给定字符串,输出有多少种翻译方式 解题思路 递归思想 计f(i)为以第i个字符开始到原字符串结 ...
- [剑指Offer]48-最长不含重复字符的子字符串(递归思想,循环实现)
题意 如题,字符串只含a-z,输出该子串长度.例:"arabcacfr",输出4. 解题思路 递归思想 计f(i)为以第i个字符结尾的最长不含重复字符的子串长度. 状态转移:计d为 ...
- Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法
Hadoop基础-HDFS递归列出文件系统-FileStatus与listFiles两种方法 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. fs.listFiles方法,返回Loc ...
- Network Saboteur (深搜递归思想的特殊使用)
个人心得:对于深搜的使用还是不到位,对于递归的含义还是不太清楚!本来想着用深搜构成一个排列,然后从一到n分割成俩个数组,然后后面发现根本实现不了,思路太混乱.后来借鉴了网上的思想,发现用数组来标志,当 ...
随机推荐
- 《TCP/IP详解 卷一》读书笔记-----TCP persist &Keeplive timer
1.persist timer:当接收方建议的窗口大小为0时,发送方就会停止发送,直到接收方有缓存空间时再用一个窗口值非零的ACK提示发送方可以继续发送.但是这个称为window update的ACK ...
- 分享一个Fluent风格的邮件发送封装类
C#中用SmtpClient发邮件很简单,闲着无事,简单封装一下 IEmailFactory public interface IEmailFactory { IEmailFactory SetHos ...
- Adobe Scout 入门
http://www.adobe.com/cn/devnet/scout/articles/adobe-scout-getting-started.html Adobe Scout 是新一代 Flas ...
- C语言中,&和&&都是做什么的?
&按位&&逻辑与 逻辑运算符把各个运算的变量(或常量)连接起来组成一个逻辑表达式.逻辑运算符有4个,它们分别是: !(逻辑非). ||(逻辑或).&&(逻辑与) ...
- <<Effective Java>>之善用组合而不是继承
使用JAVA这门OO语言,第一要义就是,如果类不是专门设计来用于被继承的就尽量不要使用继承而应该使用组合 从上图2看,我们的类B复写了类A的add喝addALL方法,目的是每次调用的时候,我们就能统计 ...
- (copy)C#时间日期操作
copy to:http://www.cnblogs.com/loveme123/archive/2012/06/27/2565547.html 一.C# 日期格式 DateTime dt = Da ...
- ls -F一种非常有用的ls格式
ls -F一种非常有用的ls格式 tz/y/yupeng > ls -F#q# News/ doc/ images/ mbox ...
- XXOOJL
她的鞋子放在外面没拿进来很显眼,我们俩正抱在床上,刚做完什么也没穿,她也没擦.听到门外的脚步声.赶紧穿.她在我房间里没出声,但我父亲肯定看出来了.于是问我:母亲去哪了,然后他去找她. 太尴尬了,那晚我 ...
- 用 eric6 与 PyQt5 实现python的极速GUI编程(系列02)---- 省市县(区)下拉列表多级联动
[概览] 本文实现如下的程序: 主要步骤如下: 1.在eric6中新建项目,新建窗体 2.(自动打开)进入PyQt5 Desinger,编辑图形界面,保存 3.回到eric 6,对上一步得到的界面文件 ...
- 1从零开始学习Xamarin.iOS安装篇
安装和配置xamarin.ios 最近.net 开源新闻很火呀,于是想学习xamarin,早1年前就了解过这个东西,但是一直没有时间来学习,我这里装的是MAC上面的版本,废话不多说开始第一步安装. 概 ...