欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

实现递归、迭代和遍历的C语言

最编程 2024-08-12 10:02:54
...

2021/07/13

阶乘的实现(感受:递归、迭代、遍历的思想)

参考网上的一篇文章:递归与迭代的区别 (画的图讲的逻辑还是挺清晰的)

循环遍历,递归,迭代

自己学习C时的一点感悟代码(2021/07/13--a):

#include <stdio.h>		//c-头文件库标准库IO引用 
#include <stdlib.h>

//=======================================================
//声明定义区 
int function1 (int*,int);	//递归
int function2 (int*,int);	//迭代
int function3 (int*,int);	//循环遍历

//=======================================================
//main()主函数区  
int main(void){
	int numb=4;
	int sum=0;
  	for (int i=1;i<=numb;i++){	//阶乘的循环遍历实现
		sum=function3(&sum,i);	//调用遍历的计算函数  //sum=(i==1&&*sum==0)?i:(*sum)*i;
	}
	sum=0;
	printf ("\n%d %d",sum*numb,function1(&sum,numb));	//先递归到里层,从里层往浅层返回计算
	sum=0;
	printf ("\n%d %d",sum,function2(&sum,numb));		//从浅层往里层计算,并递归到里层 ,最里层返回结果
	sum=0;
}

//=======================================================
//构造函数定义区 :
int function3 (int *value,int i){	//循环遍历时的计算函数
	return (i==1&&*value==0)?i:(*value)*i;
}
int function2 (int *value,int i){	//从浅层往里层计算并返回 ,【迭代】 
	if(*value==0){		//递归开始阶段 
		*value=1*i;
		return function2(value,i-1);
	}else if(i!=1){		//计算,并往里层递归 
		*value=(*value)*i;
		return function2(value,i-1);
	}else if(i==1){		//最里层时,返回之前计算结果值 到最浅层 
		return (*value)*1;
	}else{				//异常返回 
		return -1;
	}
}
int function1 (int *value,int i){	//从里层往浅层,返回计算 【递归】 
	if(i==1){	//递归到最里层时,返回1准备计算 
		if(*value==0)return 1;
		else return -1;
	}else{
		*value=function1(value,i-1);	//先开始递归 
		return (*value)*i;				//开始计算并返回 
	}
}