遞迴函式例項大全

weixin_47758784發表於2020-10-28



一、遞迴函式

函式func()直接或間接呼叫函式本身,則該函式稱為遞迴函式。遞迴函式不能定義為行內函數。在數學上,關於遞迴函式的定義如下:對於某一函式f(x),其定義域是集合A,那麼若對於A集合中的某一個值X0,其函式值f(x0)由f(f(x0))決定,那麼就稱f(x)為遞迴函式。其實在c語言中,遞迴就是函式自己呼叫自己。

二、常見遞迴例項

1.求字串的長度

程式碼如下:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
int strLen(char str[]);
int main()
{
	/*求字串長度*/
	char str[] = "hello";
	int n = strLen(str);
	printf("%d\n", n);
	system("pause");
	return 0;
}
//求字串長度(遞迴法)
int strLen(char str[])
{
	if (str[0] == '\0'){
		return 0;
	}
	return 1 + strLen(str + 1);
}

2.字串的逆序顯示

程式碼如下:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
int reverse_string(char *str);
int main()
{
	/*輸入字串然後逆序輸出*/
	char str[100];
	gets(str);
	reverse_tring(str);
	system("pause");
	return 0;
}
//將字串按反向排列輸出(遞迴法)
void reverse_tring(char *str)
{
	if (strlen(str)>0)
	{
		printf("%c ", str[strlen(str) - 1]);
		str[strlen(str) - 1] = '\0';
		reverse_tring(str);
	}
}

3.計算一個整數的各個位的和

程式碼如下:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
int DigitSum(int n);
int main()
{
/*計算一個數的各個位的和*/
	int n = 3456;
	int ret = DigitSum(n);
	printf("%d", ret);
	system("pause");
}
//實現一個數的各個位之和(遞迴法)
int DigitSum(int n)
{
	if (n <= 9){
		return n;
	}
	return  n % 10 + DigitSum(n / 10);
}

4.實現n的k次方

程式碼如下:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
int exp(int n, int k);
int main()
{
    int n = 4,k = 4;
	int ret=exp(n, k);
	printf("%d\n", ret);
	system("pause");
}
//實現n的k次方(遞迴法)
int exp(int n, int k)
{
	if (k <= 1){
		return n;
	}
	return n*exp(n, k - 1);
}

5.計算第n的斐波那契數

程式碼如下:

#include<stdio.h>
#include<string.h>
#pragma warning (disable:4996)
int fib(int n);
int main()
{
    int n = 0;
	printf("請輸入一個數:");
	scanf("%d",&n);
	int ret=fib(n);
	printf("%d\n", ret);
	system("pause");
	return 0;
}
//求斐波那契數列(遞迴法)
int fib(int n)
{
	if (n == 1){
		return 1;
	}
	if (n == 2){
		return 1;
	}
	return fib(n-1)+ fib(n-2);
}


三、總結

以上就是今天要講的內容,本文僅僅簡單介紹了最常用的用遞迴函式處理問題的一些演算法,加深對遞迴思想的理解。也希望本文對各位老鐵的學習有所幫助。

相關文章