C語言_函式遞迴舉例
阿新 • • 發佈:2018-12-19
1.遞迴和非遞迴分別實現求第n個斐波那契數。
//求第 n 個斐波那契數 #include <stdio.h> #include <stdlib.h> int Fib1(int n) { if (n == 1 || n == 2) { return 1; } return Fib1(n - 1) + Fib1(n - 2); } int Fib2(int n) { if (n == 1 || n == 2) { return 1; } int num1 = 1, num2 = 1,result = 0; for (int i = 3; i <= n; i++) { result = num1 + num2; num1 = num2; num2 = result; } return result; } int main() { printf("%d\n", Fib2(40)); printf("%d\n", Fib1(40)); system("pause"); return 0; }
2.編寫一個函式實現n^k,使用遞迴實現。
//求n^k
#include <stdio.h>
#include <stdlib.h>
int Mi(int n,int k)
{
if (k == 0)
{
return 1;
}
return n * Mi(n, k - 1);
}
int main()
{
printf("%d\n",Mi(5,3));
system("pause");
return 0;
}
3. 寫一個遞迴函式DigitSum(n),輸入一個非負整數,返回組成它的數字之和。
例如,呼叫DigitSum(1729),則應該返回1+7+2+9,它的和是19。
//求一個非負整數的各數位之和
#include <stdio.h>
#include <stdlib.h>
int DigitSum(int n)
{
if (n > 9)
{
return n % 10 + DigitSum(n / 10);
}
return n;
}
int main()
{
printf("%d\n", DigitSum(1729));
system("pause");
return 0;
}
4. 編寫一個函式reverse,實現將引數字串中的字元反向排列,不能使用C函式庫中的字串操作函式。
//將字串中的字元反向排列 #include <stdio.h> #include <stdlib.h> void reverse(char* str) { char* first = str; while (*str != '\0') { str++; } while (str != first) { str--; printf("%c", *str); } } int main() { char str[] = "hello"; reverse(str); printf("\n"); system("pause"); return 0; }
5.遞迴和非遞迴分別實現strlen。
//將字串中的字元反向排列
#include <stdio.h>
#include <stdlib.h>
void reverse(char* str)
{
char* first = str;
while (*str != '\0')
{
str++;
}
while (str != first)
{
str--;
printf("%c", *str);
}
}
int main()
{
char str[] = "hello";
reverse(str);
printf("\n");
system("pause");
return 0;
}
6.遞迴和非遞迴分別實現求n的階乘。
//求n的階乘
#include <stdio.h>
#include <stdlib.h>
int Factorial1(int n)
{
if (n == 1)
{
return 1;
}
return n*Factorial1(n - 1);
}
int Factorial2(int n)
{
int result = 1;
for (int i = 1; i <= n; i++)
{
result = result * i;
}
return result;
}
int main()
{
printf("%d\n", Factorial1(5));
printf("%d\n", Factorial2(5));
system("pause");
return 0;
}
7.遞迴方式實現列印一個整數的每一位。
//列印一個整數的每一位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void digit(int n)
{
if (n > 9)
{
digit(n / 10);
}
printf("%d\n", n % 10);
}
int main()
{
int n = 0;
printf("請輸入一個整數:\n");
scanf("%d",&n);
digit(n);
system("pause");
return 0;
}