- 遞歸和非遞歸分別實現求第n個斐波那契數
例如:
輸入:5 輸出:5
輸入:10, 輸出:55
輸入:2, 輸出:1
#include<stdio.h>
int fib(int n)
{
int result;
int pre_result;
int next_older_result;
result = pre_result = 1;
while (n > 2)
{
n -= 1;
next_older_result = pre_result; pre_result = result;
result = pre_result + next_older_result;
}
return result;
}
int main()
{
int n = 3;
printf("請輸入要求第幾個數:");
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
return 0;
}
#include<stdio.h>
int fib(int n)
{
if (n <= 2)
return 1;
else
return fib(n - 1) + fib(n - 2);
}
int main()
{
int n = 3;
printf("請輸入要求第幾個數:");
scanf("%d", &n);
int ret = fib(n);
printf("%d\n", ret);
return 0;
}
- 編寫一個函數實現n的k次方,使用遞歸實現。
要求:k可以正數或負數
#include<stdio.h>
int nk(int n,int k)
{
if (n == 1)
{
return 1;
}
if (k == 0)
{
return 1;
}
if (k == 1)
{
return n;
}
if (k < 0)
{
k = -k;
}
if (k > 0)
{
return n * nk(n, k - 1);
}
}
int main()
{
int n = 0;
int k = 0;
printf("請輸入n和k:");
scanf("%d %d", &n, &k);
if (k >= 0)
{
int m = nk(n, k);
printf("%d\n",m);
}
else
{
int m = nk(n, k);
printf("1/%d\n",m);
}
return 0;
}
- 寫一個遞歸函數DigitSum(n),輸入一個非負整數,返回組成它的數字之和
例如:調用DigitSum(1729),則應該返回1+7+2+9,它的和是19
輸入:1729,輸出:19
#include <stdio.h>
int print(int n)
{
if (n > 0)
{
return n%10+print(n / 10);
}
return 0;
}
int main()
{
int num = 0;
scanf("%d", &num);
printf("\n%d\n", print(num));
return 0;
}
- 編寫一個函數 reverse_string(char * string)(遞歸實現)
實現:將參數字符串中的字符反向排列。
要求:不能使用C函數庫中的字符串操作函數。
#include <stdio.h>
#include <assert.h>
void reverse_string(char const * string)
{
assert(string != NULL);
if (*string != '\0')
{
string++;
reverse_string(string);
printf("%c", *(string - 1));
}
}
int main()
{
char *string = "123456789";
printf("原字符串爲: %s\n反向排列後爲:", string);
reverse_string(string);
printf("\n");
return 0;
}
- 遞歸和非遞歸分別實現strlen
.#include<stdio.h>
int mystrlen(char* string)
{
int count = 0;
while (*string != '\0')
{
count++;
string++;
}
return count;
}
int main()
{
char string[] = "0123456789";
int ret = mystrlen(string);
printf("%d\n", ret);
system("pause");
return 0;
}
#include<stdio.h>
int mystrlen(char* string)
{
if (*string != '\0')
{
return 1 + mystrlen(string + 1);
}
else
{
return 0;
}
}
int main()
{
char string[] = "0123456789";
int ret = mystrlen(string);
printf("%d\n", ret);
system("pause");
return 0;
}
- 遞歸和非遞歸分別實現求n的階乘(不考慮溢出的問題)
#include<stdio.h>
#include<stdlib.h>
int Sum(int n)
{
if (n ==0)
{
return 1;
}
else
{
return Sum(n - 1)*n;
}
}
int main()
{
int n = 0;
printf("請輸入一個整數!\n");
scanf("%d", &n);
printf("%d\n", Sum(n));
system("pause");
return 0;
}
#include<stdio.h>
#include<stdlib.h>
int Sum(int n)
{
if (n ==0)
{
return 1;
}
else
{
return Sum(n - 1)*n;
}
}
int main()
{
int n = 0;
int i = 1;
int m = 1;
printf("請輸入一個整數!\n");
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
m = m * i;
}
printf("%d\n", m);
system("pause");
return 0;
}
- 遞歸方式實現打印一個整數的每一位
#include <stdio.h>
void print(int n)
{
if (n > 9)
{
print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int num = 0;
printf("請輸入一個整數:");
scanf("%d", &num);
print(num);
return 0;
}