1. 程式人生 > 其它 >C語言實現,遞迴、迭代、遍歷

C語言實現,遞迴、迭代、遍歷

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);	//迴圈遍歷

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;			//開始計算並返回 
	}
}