1. 程式人生 > >【C語言】簡單的瞭解遞迴(求斐波那契,n的階乘,字串長度,把一個整型(無符號),轉化為字元型並打印出來)

【C語言】簡單的瞭解遞迴(求斐波那契,n的階乘,字串長度,把一個整型(無符號),轉化為字元型並打印出來)

簡單瞭解遞迴

1.什麼是遞迴???

程式設計程式呼叫自身的程式設計技巧稱為遞迴( recursion)

遞迴做為一種演算法在程式設計語言中廣泛應用。 一個過程或函式在其定義或說明中有直接 或間接呼叫自身的一種方法,它通常把一個大型複雜的問題層層轉化為一個與原問題相似的 規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計 算,大大地減少了程式的程式碼量。

遞迴的主要思考方式在於:把大事化小

但是要特別注意在不停的呼叫函式自身是有可能會產生棧溢位

2.遞迴的兩個必要條件

(1.)存在限制條件,當滿足這個限制條件的時候,遞迴便便不再繼續。

(2.)每次遞迴呼叫之後越來越接近這個限制條件。

特點:能用遞迴處理的問題都是可以用它的子問題來處理(相同的程式碼)

接下來看道題

把一個整型(無符號),轉化為字元型並打印出來

例如:4567 輸出:4 5 6 7
#include<stdio.h>
#include<Windows.h>
void print(num)
{
	if (num > 9)
	{
		print(num/10);
	}
	printf("%c ", num % 10 +  '0');
}
int main()
{
	int num = 0;

	num = 4567;

	print(num);
	system("pause");
	return 0;
}

2.編寫函式不允許建立臨時變數,求字串的長度  

int Strlen(const char*str)
{
	if (*str == '\0')
		return 0;
	else return 1 + Strlen(str + 1);

}
int main()
{

	char *p = "abcdef1234";
	int len = Strlen(p);
	printf("%d\n", len);

	system("pause");
	return 0;
}

3.求第n個斐波那契數列

例如:1、1、2、3、5、8、13、21、34、……這樣的一串數字叫做斐波那契數列
int Fib(int n)
{
	if (n <= 2)
		return 1;
	return Fib(n - 1) + Fib(n - 2);


}
int main()
{

	int n = 0;
	printf("請輸入一個數》\n");
	scanf_s("%d", &n);
	Fib(n);
	printf("%d\n", Fib(n));
	system("pause");
	return 0;
}
3.
4.求n的階乘(不考慮溢位)
int factorial(int num)
{
	if (num == 1)
		return 1;

	return num * factorial(num - 1);

}
int main()
{

	int num = 0;
	printf("請輸入一個數:");
	scanf_s("%d", &num);

	factorial(num);

	printf("%d\n", factorial(num));
	system("pause");
	return 0;
}