遞迴實戰
斐波拉契數列
漢諾塔輸出乙個數字的每一位
倒序儲存字串
遞迴簡而言之就是函式自己呼叫自己 如圖所示
但是遞迴並不是簡簡單單的自己呼叫自己的過程 它分為傳遞和回歸,傳遞就是橙色箭頭 回歸則是黑色箭頭 這就是遞迴
以 計算階乘為例,假設我們輸入6 計算6的階乘為例
#define _crt_secure_no_warnings
#include
intfactorial
(int x)
//遞迴體函式
return x *
(factorial
(x -1)
);}int
main()
具體實現過程如下 我們可以很清楚看到 先傳遞 在歸一 就是遞迴
在傳遞的過程將問題化簡 歸一的過程將化簡的問題解決
(1). 問題的定義是按遞迴定義的(fibonacci函式,階乘,…);
(2). 問題的解法是遞迴的(有些問題只能使用遞迴方法來解決,例如,漢諾塔問題,…);
(3). 資料結構是遞迴的(鍊錶、樹等的操作,包括樹的遍歷,樹的深度,…)
#define _crt_secure_no_warnings
#include
intfactorial
(int x)
// 遞迴體
return x *
(factorial
(x -1)
);//就x!轉換成x*((x-1)!) 達到傳遞化簡的目的
}int
main()
#define _crt_secure_no_warnings
#include
intmain()
printf
("%d"
, sum)
;return0;
}
斐波拉契數列 即0、1、1、2、3、5、8、13、21、34、………這樣一串數字
遞迴解法通過數學函式定義可輕鬆得到 他的遞迴體
是當n>1時fib(n-2)+fib(n-1)
遞迴出口就是n=0 返回0,n=1,返回1
#define _crt_secure_no_warnings
#include
intfib
(int x)
//第0個元素為0 第乙個元素為1
else
if(x ==1)
//出口
else
return
fib(x -2)
+fib
(x -1)
;//迴圈體
}int
main()
#define _crt_secure_no_warnings
#include
intfib
(int x)
return k;
}int
main()
漢諾塔簡單了解
如 輸入 1234 輸出 1 2 3 4
這裡用取對數的方法得到有多少位 依次除以位數的10次方 即可
#define _crt_secure_no_warnings
#include
#include
void
elect
(int x)
}while(1
);printf
("\n \n");
}void
elect2
(int x)
}int
main()
#define _crt_secure_no_warnings
#include
void
elect
(int x)
printf
("%d "
, x %10)
;//出口
}int
main()
將引數字串中的字元反向排列,不是逆序列印
#define _crt_secure_no_warnings
#include
#include
#include
#include
void
reverse_string
(char arr)
*(arr + sz -1)
= tmp;
}int
main()
C語言精要總結 指標系列(二)
此文為指標系列第二篇 c語言精要總結 指標系列 一 c語言精要總結 指標系列 二 前面提到過指標的解引用運算,除此之外,指標還能進行部分算數運算 關係運算 指標能進行的有意義的算術運算包括加減法運算,但不包括乘除運算。並且運算存在諸多限制。加法運算 指標加法運算只適合指標與整數,不能用在指標與指標。...
c語言 遞迴
遞迴 電影 盜夢空間 定義 直接或者間接的呼叫自身的函式。兩個特性 存在限制條件,當滿足條件時遞迴不再繼續 每次遞迴之後越來越接近限制條件 缺點 涉及執行開銷,引數必須壓到堆疊,為區域性變數分配記憶體空間。1.將二進位制整數轉換為字元 1 引數值除以10 2 列印quotient當前值的各位數字 3...
遞迴與尾遞迴 (C語言)
在電腦科學領域中,遞迴式通過遞迴函式來實現的。程式呼叫自身的程式設計技巧稱為遞迴 recursion 乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算...