用遞歸的方法解決問題

遞歸和非遞歸分別實現求第n個斐波那契數。
(1 1 2 3 5 8 13 21 34 55…)

//(1)遞歸的方法:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fib(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	return Fib(n - 1) + Fib(n - 2);
}
int main()
{
	int n = 0;
	printf("please input a num:");
	scanf("%d", &n);
	int num = Fib(n);
	printf("%d\n", num);
	system("pause");
	return 0;
}

//(2)非遞歸的方法:(循環)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fib(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	int num1 = 1;
	int num2 = 1;
	int sum = 0;
	for (int i = 3; i <= n; ++i)
	{
		sum = num1 + num2;
		num1 = num2;
		num2 = sum;
	}
	return sum;

}
int main()
{
	int n = 0;
	printf("請輸入要求的斐波那契數列的項數:\n");
	scanf("%d", &n);
	int num = Fib(n);
	printf("%d\n", num);
	system("pause");
	return 0;
}

在這裏插入圖片描述

編寫一個函數實現n^k,

//(1)非遞歸實現:(n爲整數,不考慮k爲分數,負數)
#define _crt_secure_no_warnings
#include<stdio.h>
#include<stdlib.h>
int factor(int n,int k)
{
	int mul = 1;
	for (int i = 1; i <= k; ++i)
	{
		mul = mul*n;
	}
	return mul;
}
int main()
{
	int n = 0;
	int k = 0;
	printf("請輸入n和k:");
	scanf("%d %d", &n,&k);
	int num = factor(n,k);
	printf("%d\n", num);
	system("pause");
	return 0;
}

////(2)遞歸實現
#define _CRT_SECURE_NO_WARNINGS//(n爲整數,不考慮k爲分數,負數)
#include<stdio.h>
#include<stdlib.h>
int Factor(int n, int k)
{
	if (k == 1)
	{
		return n*1;
	}
	else
	{
		return Factor(n, k-1)*n;
	}
	return 0;
}
int main()
{
	int n = 0;
	int k = 0;
	printf("請輸入n和k:\n");
	scanf("%d %d", &n, &k);
	int num = Factor(n, k);
	printf("%d\n", num);
	system("pause");
	return 0;
}

在這裏插入圖片描述

遞歸方式實現打印一個整數的每一位

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void Factor(int n)
{
	int tmp = 0;
	if (n > 9)
	{
		Factor(n / 10);
	}
	printf("%d\n", n % 10);
}
int main()
{
	int n = 0;
	printf("請輸入一個數字:\n");
	scanf("%d", &n);
	Factor(n);
	system("pause");
	return 0;
}

在這裏插入圖片描述

寫一個遞歸函數DigitSum(n),輸入一個非負整數,返回組成它的數字之和,
例如,調用digitsum(1729),則應該返回1 + 7 + 2 + 9,它的和是19

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int DigitSum(int n)
{
	if (n > 0)
	{
		return n % 10 + DigitSum(n / 10);
	}
	return 0;
}
int main()
{
	int num = 0;
	scanf("%d", &num);
	printf("%d\n", DigitSum(num));
	system("pause");
	return 0;
}

在這裏插入圖片描述

遞歸和非遞歸分別實現求n的階乘

//(遞歸方法:)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int Fac(int num)
{
	if (num == 1)
	{
		return 1;
	}
	if (num > 1)
	{
		return Fac(num - 1)*num;
	}
	return 0;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int num = Fac(n);
	printf("%d\n", num);
	system("pause");
	return 0;
}
(1)非遞歸方法:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int mul = 1;
	for (int i = n; i > 0; --i)
	{
		mul *= i;
	}
	printf("%d\n", mul);
	system("pause");
	return 0;
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章