博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归--Recursion
阅读量:5128 次
发布时间:2019-06-13

本文共 1039 字,大约阅读时间需要 3 分钟。

  记得研究生面试的时候,面试老师问了这样一个问题:说说你队递归的理解。 顿时我就懵了,什么是递归。。。当时我想到了什么八皇后(好像我说得也没错呀~八皇后就是典型的递归+回溯),然后就胡说了一通。当时我导师也在那,真的感觉太丢脸了。一个科班出身的人,学了三年编程,竟然不知道怎么描述递归。~~~~(>_<)~~~~   今天看了C语言的科学与艺术这本书上刚刚有讲递归的这章,认真再去学习学习。唯一给我安慰的一句话是:很多人要花很多年时间才能有效的运用递归。哈哈,看来我还不是很笨哈。下面就来总结下递归的知识吧。

递归(Recursion)

  递归是指把一个很大的问题转化成同样形式但小一些的问题加以解决。用一个求阶乘(n!)的例子来简单说明递归的概念。

#include 
int Factorial(int n){ if (n == 0) { return 1; } else { return (n*Factorial(n-1)); }}int main(){ printf("%d\n", Factorial(3));}

 

  n!=n×(n-1)!;n!=1,当n=1时。 由此,我们就可以看到,阶乘的问题可以分解成一个新的,更小的,与原来有相同形式的问题。

  同样的,n^k=n×n^(k-1).

  

int RaiseIntToPower(n,k){    if (k == 0)    {        return 1;    }    else    {        return (n*RaiseIntToPower(n,k-1));    }}

这些问题都满足以下条件:

1)可以找出简单情况,对这些简单简况,答案很容易确定。

2)可以用递归分解把复杂问题分解成相同类型的简答问题;然后应用同一种方案解决这些相对简单的问题。

 

典型递归函数的函数体都符合以下范例:

if(简单的测试条件)

{

  return (不需要递归计算的简单解决方案);

}

else

{

  return (涉及调用同一函数的递归解决方案);

}

 

 

 

 

前几天写的permutation也是递归的。 好了,今晚就写到这了,玩点其它的。

 

 

 

转载于:https://www.cnblogs.com/Jason-Damon/archive/2013/04/16/3025219.html

你可能感兴趣的文章
[NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
查看>>
Python IO模型
查看>>
DataGridView的行的字体颜色变化
查看>>
局域网内手机访问电脑网站注意几点
查看>>
[Serializable]的应用--注册码的生成,加密和验证
查看>>
Android-多线程AsyncTask
查看>>
LeetCode【709. 转换成小写字母】
查看>>
如何在Access2007中使用日期类型查询数据
查看>>
CF992E Nastya and King-Shamans(线段树二分+思维)
查看>>
如果没有按照正常的先装iis后装.net的顺序,可以使用此命令重新注册一下:
查看>>
linux install ftp server
查看>>
Ubuntu下的eclipse安装subclipse遇到没有javahl的问题...(2天解决了)
查看>>
alter database databasename set single_user with rollback IMMEDIATE 不成功问题
查看>>
WCF揭秘——使用AJAX+WCF服务进行页面开发
查看>>
【题解】青蛙的约会
查看>>
IO流
查看>>
mybatis调用存储过程,获取返回的游标
查看>>
设计模式之装饰模式(结构型)
查看>>
面向对象的设计原则
查看>>
Swift3.0服务端开发(三) Mustache页面模板与日志记录
查看>>