C 递归 技术教程文章

黑马程序员--C语言--预处理指令、枚举、Typedef、递归函数、变量作用域【代码】

一、预处理指令1>所有的预处理指令都是以#号开头;2>预处理指令是在代码翻译成0,1之前执行;3>预处理指令最后没有分号;4>预处理指令的位置可以随便写;5>预处理指令有作用域,从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用;预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含二、宏定义1. 宏定义命名规则:1>大写字母 1#define COUNT 2>k开头首字母大写 #define kCount2. 宏定义开始和结束,注意结尾处没...

c语言斐波那契数列递归法

斐波那契数列递归斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从19...

C语言之函数调用12—递归法求阿克曼函数

//递归法! /* =========================================== 题目:编写阿克曼函数的递归函数程序! A(m,n)=n+1 (m=0)A(m-1,1) (m=0)A(m-1,A(m,n-1)) (m!=0,n!=0)=========================================== */ #include<stdio.h> int A(int m,int n) {if(m==0)return n+1;else if(n==0)return A(m-1,1);elsereturn A(m-1,A(m,n-1)); } void main() {int m,n,p,flag=1;while(...

C语言之函数调用17—递归法之一般函数的调用(2)

//递归法 /* ================================================================== 题目:求F(60),其中F(n)定义如下: F(0)=0; F(1)=1; F(2n)=f(n)+3; F(2n+1)=F(n)+F(2n-1). ================================================================== */ #include<stdio.h> double F(int n) {if(n==0) return 0;else if(n==1) return 1;else if(n%2==0)return F(n/2)+3;else if(n%2!=0)return F((n-1)/2)+F(n-2); } void main() {int...

C语言编程 递归方法与非递归方法 实现将参数字符串中的字符反向排列【代码】【图】

//题目要求要求:不能使用C函数库中的字符串操作函数(否则本题也没什么意义了啊) <1>非递归方法此方法基本思想是设立两个指针,分别指向字符串的头尾并且依次交换所指向的数据,代码中为left和right源代码:#include<stdio.h> #include<stdlib.h> #include<string.h>//因为要使用strlen()语句 void reverse_string(char str[]) {int temp;char *left = str;char *right = str + strlen(str) - 1;while (*left <* right){temp = *...

[C/C++]C语言中函数递归的几个简单案例【代码】

1. 函数递归概念 程序调用自身的编程技巧称为递归 。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,可以把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。 2.两个必要条件 (1)要有限制条件; (2)每次调用都会向限制条件靠近; 3.简单案例 (1)递归实现打印一个整数的每一位 int pr (int a) {if (a > 9){pr(a / 10);}printf("%d " , a%10); }int main() {int num ...

C语言编程-8_7 递归问题 Ackermann函数

Ackermann函数ack(m,n)采用以下递归式定义: ack(0,n)=n+1 ack(m,0)=ack(m-1,1) ack(m,n)=ack(m-1,ack(m,n-1)) 其中,m>0,n>0 编写一个计算此函数的递归函数。 测试用例: 如输入: 1,1 则输出: 3#include<stdio.h> int ack(int m, int n) {if (m == 0){return n + 1;}else if (n == 0){return ack(m - 1, 1);}else //if (m > 0 && n > 0){return ack(m - 1, ack(m, n - 1));}}int main() {int m,n ;scanf_s("%d,%d",&m,&n); //注...

C语言编程 递归方法与非递归方法 实现将参数字符串中的字符反向排列【代码】【图】

//题目要求要求:不能使用C函数库中的字符串操作函数(否则本题也没什么意义了啊) <1>非递归方法此方法基本思想是设立两个指针,分别指向字符串的头尾并且依次交换所指向的数据,代码中为left和right源代码: #include<stdio.h> #include<stdlib.h> #include<string.h>//因为要使用strlen()语句 void reverse_string(char str[]) {int temp;char *left = str;char *right = str + strlen(str) - 1;while (*left <* right){temp = ...

C语言编程 递归和非递归分别实现strlen【代码】

<1>非递归基本思想:依次读字符串的每一位,若不是\0则累加器++源代码: #include<stdio.h> #include<stdlib.h> int Mystrlen(char *str) {int i=0;while (*(str+i)!='\0'){i++;}return i; }int main() {char *str = "absjcs";int result;result=Mystrlen(str);printf("%d", result);system("pause");return 0; } <2>递归思想为判断当前一位元素是否为\0,然后进行下一次判断则递归次数就是字符串长度源代码: #include<stdio.h> #...

C语言编程 递归和非递归分别实现求n的阶乘【代码】

<1>非递归主要思想是设计累乘器,通过对自身每一次改变的乘积就是结果 #include<stdio.h> #include<stdlib.h> int main() {int number, m,result=1;printf("请输入要计算的阶乘数\n");scanf("%d", &number);for (m = 1; m <= number; m++){result *= m;}printf("%d", result);system("pause");return 0; } <2>递归具体参照https://blog.51cto.com/14232799/2377394与其中的递归方法类似 #include<stdio.h> #include<stdlib.h> int ...

C语言编程 递归方式实现打印一个整数的每一位【代码】

主要思想依旧是取位和调用数字的缩小参照https://blog.51cto.com/14232799/2377396源代码: #include<stdio.h> #include<stdlib.h> void print(int n) {if (n > 9){print(n / 10);//数的缩小}printf("%-4d", n%10);//取位 } int main() {int number;printf("请输入要打印的数\n");scanf("%d", &number);print(number);system("pause");return 0; }

C语言编程实现斐波那契数列(递归与非递归)【代码】

一.非递归 <1>数组 #include<stdio.h> #include<stdlib.h> int main() {int a[10000] = { 0 };//利用数组求不了较大位置的斐波那契数int i,m;a[0] = 1;a[1] = 1;printf("请输入要求第几个斐波那契数(大于等于2)\n");scanf("%d", &m);for (i = 2; i <=m; i++){a[i] = a[i - 1] + a[i - 2];}printf("所求的数是%d\n",a[m]);system("pause");return 0; } <2> 非数组 #include<stdio.h> #include<stdlib.h> int Fabonaci(int n) {int f...

开始学习C语言递归程序,汉诺(hanoi)塔问题尝试

汉诺问题:3个座A, B,C, 在A座有64个大小不等的盘,现在要把64个盘转移到另一个座,每次只能移动一个盘,且大盘不能放在小盘上面。 思考过程。 1)移动1个盘到另一个座需要搬1次,记 a(1) = 1 2)移动2个盘:在已经移动1个盘的基础上(用a1次),将第2个盘放到另一个空座(1次),然后再将第1个盘移动到第2个盘上,需要a1次,记 a(2) = 2 * a(1) + 1 3)移动3个盘:在已经移动2个盘的基础上(用a2次),将第3个盘放到另一个空座...

C语言递归函数【代码】

(更新中……) 基本概念1.函数的调用形式包括嵌套调用和递归调用。2.递归调用包括直接递归调用和间接递归调用。3.递归函数一般由一个选择结构组成:条件为真的部分,计算基本问题终止递归调用;条件为假的部分,简化问题继续递归调用。 实际问题1.汉诺塔问题:将A座上的盘子借由B座全部搬到C座上。解题思路:将A座上的n个盘子的搬运操作分解为以下3个部分。①输出将A座上前n-1个盘子借助C座搬至B座的指令。②输出将A座上最后剩下的第...

C语言递归函数 计算s=1²+2²+3²+…+n²的值【代码】【图】

#include<stdio.h> long fun(int n){long s;if(n==1){s=1;}else{s=fun(n-1)+n*n;}return s; } void main(){int n;printf("请输入一个数:");scanf("%ld",&n);printf("%ld",fun(n)); }

兔子生娃问题---函数递归应用--c语言实现【代码】

事情是这样的:在很久很久以前。。。。有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?兔子的规律为数列:1, 1, 2, 3, 5, 8, 13, 21 ....#include

c语言实现扫雷(递归实现自动展开)【代码】【图】

要想实现扫雷的游戏我们要知道扫雷的规则是什么:在一个99(初级),1616(中级),16*30(高级),或自定义大小的方块矩阵中随机布置一定量的地雷(初级为10个,中级为40个,高级为99个)。由玩家逐个翻开方块,以找出所有地雷为最终游戏目标。如果玩家翻开的方块有地雷,则游戏结束。 游戏主区域由很多个方格组成。使用鼠标左键随机点击一个方格,方格即被打开并显示出方格中的数字;方格中数字则表示其周围的8个方格隐藏了几颗雷。我们这...

阶乘 利用递归函数实现 c语言 简单易懂

#include<stdio.h>//标准的输入输出流 #include<stdlib.h>//system(“pause”)要用 int func(int n);//进行阶乘运算的具体实现形式 int main(void)//主函数 { int sum = 1;//定义并初始化sum的值为1 int n;//定义一个变量n printf(“请输入你想要几的阶乘\n”);//提示用户输入想要几的阶乘 scanf_s("%d", &n);//将你刚刚输入的数读入到变量n中去 sum = func(n);//通过传入n的值,来计算它的阶乘所得的数,并将所得的结果返回,并通...