C語言實現,遞迴、迭代、遍歷
阿新 • • 發佈:2021-07-13
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; //開始計算並返回 } }