深度解析C语言之递归求解算法

哈哈哈!!!

本文主要包括两个部分:

1.递归算法介绍。

2.基本题目求解。

递归,我个人认为也是个极其折磨人的算法,难以理解。

曾几何时,有人说过一句令人望而却步的话,人创造迭代(个人理解为循环),神,创造递归。

由此可见,递归的恐怖!!!

吓死宝宝了!!!让我哭会儿哈!!!

算法介绍

先来个标准版的:

程序调用自身的编程技巧称为递归( recursion)。

递归做为一种算法在程序设计语言中广泛应用。

一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,

它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,

递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,

大大地减少了程序的代码量。

递归的主要思考方式在于:把大事化小

递归的必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续。

2.每次递归调用之后越来越接近这个限制条件。

简单易懂版的:

所谓递归就是在大学上课时上老师说大家都要坐在前8排,现在你正在最后一排坐着(开玩笑哈!!!这么爱学习的孩子咋能在最后一排里!!!哼!!欺负我!!不和你玩了!),你也不想数一数你在第几排,这时你就问前一排的v美美v哈,前排的v美美v和你一样又问前排,一直这样问到了第一排,这时有回信了,说第一排,又一个一个传了回来每个人把传到的数加1就是当前的位置了,就这样就传了回来,你也知道了自己的位置。。。说到底,你要往前移座位吗???

嘿嘿嘿!!!

题目求解

题目1:斐波那契数列求解(和小青蛙跳台阶类似,自行解答哦)

递归算法:

int fib1(int n)
{
	if (n == 1 || n == 2)
		return 1;
	else
		return faib1(n - 1) + faib1(n - 2);
}

非递归算法:

long long faib2(int n)
{
	long long a = 1;
	long long b = 1;
	long long c = 1;
	while (n > 2)
	{
		c = a + b;//实现重新赋值一定要弄明白哈
		a = b;
		b = c;
		n--;
	}
	return c;
}
//由于作者写代码时相求更大的斐波那契数而定义long long

题目二:实现一个数各位上的数的和(递归算法)

int DigitSum(int n)
{
	if (n > 9)
	{

		return n%10+DigitSum(n/10);//关键点

	}
	else
	{
		return n;
	}

题目三:阶乘计算

非递归算法


int factorial(int x)
{
	int ret = 1;
	for (int i = 1; i <= x; i++)
	{
		ret *= i;
	}
	return ret;
}

递归算法

int factorial(int x)
{
	if (x == 1)
	{
		return 1;
	}
	else
		return x * factorial(x - 1);
}

注:编者水平有限,若有错误,欢迎指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值