递归(recursive)函数是“自己调用自己”的函数,无论是采用直接或间接调用方式。间接递归意味着函数调用另一个函数(然后可能又调用第三个函数等),最后又调用第一个函数。因为函数不可以一直不停地调用自己,所以递归函数一定具备结
递归函数
直接或者间接调用函数本身。“自己调用自己”
什么情况下面可以使用递归呢?
解决一个问题时,解决思路化成与问题本身类似的问题时,“递归”
是不是所有的递归问题,C语言都能支持呢?
不是的
C语言能够解决的递归问题,必须要满足两个条件:
(1) 问题本身一个递归问题。
(2) 递归不能是无限递归
适合那些递归到一定程度时,答案是显而易见的。
一定需要有一个“跳出无限递归的条件”。
C语言是如何支持递归呢?
int age(int n) //从425行开始,定义了一个标识符 age
//age就表示求第n个人的年龄
{
if(n > 1)
{
return age(n-1)+2;
}
else if(n == 1)
{
return 10;
}
}
Hanio(汉诺塔)问题
按照Hanio的规则,把n个盘子从A柱移动到C柱上面去,
中间可以利用B柱,需要将其移动的步骤打印出来。
a、确定函数名
Hanio : 一旦被确定,表示 按照Hanio的规则,把n个盘子从A柱移动到C柱上面去,中间可以利用B柱,需要将其移动的步骤打印出来。
b、确定参数
int n , char A , char B , char C
有多少个盘子
从哪里移 起点 A
移到哪儿去 终点 C
中间可以利用 中转站 B
c、确定返回值的类型 无
d、代码、算法具体实现
void Hanio(int n, char A, char B , char C)
{
if(n == 0)
{
return ;
}
//1.想办法(Hanio),把n-1个盘子从A柱移动到B柱,中间可以使用C柱
Hanio(n-1, A ,C , B);
//2.直接将最后那个盘子,从A柱移动到C柱
printf("%c -> %c\n", A , C);
//3.想办法(Hanio),把n-1个盘子从B柱移动到C柱,中间可以使用A柱
Hanio(n-1, B ,A , C);
}
求斐波拉契数列的前n项和
//Get_N : 表示求斐波拉契数列的第n项元素的值
int Get_N(int n)
{
if(n == 1 || n == 2)
{
return 1;
}
return Get_N(n-1) + Get_N(n-2);
}
//sum_fei: 求斐波拉契数列的前n项和
//思路:
//先求前面的n-1的和,再加上最后一项元素的和
int sum_fei(int n)
{
if(n == 1)
{
return 1;
}
return sum_fei(n-1) + Get_N(n);
}到此这篇关于C语言递归函数与汉诺塔问题简明理解的文章就介绍到这了,更多相关C语言递归函数 内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:C语言递归函数与汉诺塔问题简明理解
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Easyx实现扫雷游戏 2023-02-06
- C语言qsort()函数的使用方法详解 2023-04-26
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Qt计时器使用方法详解 2023-05-30
- ubuntu下C/C++获取剩余内存 2023-09-18
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
