用遞迴的方法解決問題
阿新 • • 發佈:2018-12-13
遞迴和非遞迴分別實現求第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;
}