- 递归和非递归分别实现求第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;
}