1. 程式人生 > 其它 >函式遞迴

函式遞迴

技術標籤:c語言c語言

函式遞迴

文章目錄

什麼是遞迴

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

於:把大事化小

遞迴的兩個必要條件

1.存在限制條件,當滿足這個限制條件的時候,遞迴便不再繼續。
2.每次遞迴呼叫之後越來越接近這個限制條件。

練習一:接受一個整型值(無符號)按順序列印他們的每一位。

#include <stdio.h>
void print(int x)
{
	if (x > 9)
		print(x / 10);
	printf("%d ", x % 10);
}
int main()
{
	int a ;
	scanf("%d", &a);	
	print(a);	
	return 0;
}

執行結果
在這裡插入圖片描述

練習二:編寫函式不允許建立臨時變數,求字串的長度。

#include <stdio.h>
int my_strlen(char* str)
{
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}
int main()
{
	char arr[] = "bit";
	//模擬實現了一個strlen函式
	int len = my_strlen(arr);//arr是陣列,陣列傳參,傳過去的不是整個陣列,而是第一個元素的地址。
	printf("len= %d\n", len);
	return 0;

}

執行結果

在這裡插入圖片描述

遞迴與迭代

練習三:求n的階乘。(不考慮溢位)

#include <stdio.h>
int Fac(x)
{
	
	if (x <= 1)
		return 1;
	else
		return x*Fac(x - 1);
}
int main()
{
		int a = 0;
		scanf("%d", &a);
		int ret = 0;
		ret = Fac(a);
		printf("%d", a);
		return 0;
}

執行結果
在這裡插入圖片描述