C语言第七章函数递归

函数递归

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

//函数声明 
void diguifunc();
void qtfunc1();
void qtfunc2();
void qtfunc3();
int dg_jc();
int main(int argc, char *argv[]) {
	
	//函数的递归调用 
	diguifunc();
	
	//调用栈:(一块系统分配给咱们这个程序有特殊用途的内存)把形式参数 函数调用关系 局部变量 
	//这段内存是有限的 一旦超过了这个这个内存大小 就会出现崩溃现象
	
	//因为这种递归调用产生死循环问题 所以这种自己调用自己的方式 必须要有一个出口,这个出口也叫递归结束条件 
	
	//递归调用的出口范例
	//计算5的阶乘:5! 出口肯定是1!
	//dg_jc(5) = dg_jc(4)*5 递归-- 
 	//dg_jc(4) = dg_jc(3)*4  
 	//dg_jc(3) = dg_jc(2)*3
 	//dg_jc(2) = dg_jc(1)*2
 	//dg_jc(1) = 1; 这里是出口条件
 	dg_jc(5);
	//递归优缺点:
	//优点:
	//代码少,代码看起来简洁,精妙 
	//虽然简洁 但是不好理解
	//层次太深的话 调用栈(内存)太深 可能回溢出 出现这种情况下 那么说明不能用递归解决该问题
	
	//有些问题用不用递归都行 
	//有些是必须的://汉诺塔 
	
	//递归的直接或者间接调用:
	//递归函数直接调用:
	//调用递归:函数的f的过程 f函数有调用自己 这就是直接调用
	//间接调用:调用函数f1的过程中要调用f2函数 然后f2函数又要调用f1函数
	
	//
}
//递归函数:就是自己调用自己 
//执行函数将反复的调用自身 每调用自己一次就进入了一个新层 
//必须得有出口:就是递归的结束条件
void diguifunc(){
 	
	printf("This is diguifunction\n"); 
	int a = dg_jc(5); 
 	printf("%d\n",a);
	
}
//范例:
//n! 用递归函数代码 
int dg_jc(int n){
	
	int result;//保存结果 
	if(n == 1){
		return 1; //递归调用的出口 
	}else{
		result =  dg_jc(n-1) * n;
	}
    return result;		
}
//函数定义 
void qtfunc1(){
	int temp = 150; //局部变量:在函数内部定义的变量,当整个函数执行完后,局部变量所占的内存被系统自动回收 
	printf("Q1开始执行\n");
	qtfunc2();
	printf("Q1执行结束\n"); 
}
void qtfunc2(){
	printf("Q2开始执行\n");
	qtfunc3();
	printf("Q2执行结束\n"); 
} 
void qtfunc3(){
	printf("Q3开始执行\n");
	printf("Q3执行结束\n"); 
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值