1、 递归和非递归分别实现求第n个斐波那契数
#include<stdio.h>
#include<stdlib.h>
int main() {
//非递归
int f1 = 1, f2 = 1;
int n,f3,i;
printf("请输入一个数:");
scanf("%d", &n);
printf("%12d\n%12d\n", f1, f2);
for (i = 3; i <= n; i++) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
printf("%12d\n", f3);
}
system("pause");
return 0;
}
//递归
int fib(int n) {
if (n == 1 || n == 2) {
return 1;
}
else {
return fib(n - 1) + fib(n - 2);
}
}
int main() {
int n;
printf("请输入一个数:");
scanf("%d", &n);
printf("%d\n", fib(n));
system("pause");
return 0;
}
2、编写一个函数实现n^k,使用递归实现
#include<stdio.h>
#include<stdlib.h>
int capital(int n, int k) {
if (k == 0) {
return 0;
}
else if (k == 1) {
return n;
}
else {
return n * capital(n, k - 1);
}
}
int main() {
int n, k;
printf("请输入两个数:");
scanf("%d%d", &n, &k);
printf("%d\n", capital(n, k));
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 > 0) {
return n%10 + DigitSum(n / 10);
}
return 0;
}
int main() {
int n;
printf("请输入一个非负整数:");
scanf("%d", &n);
printf("%d\n", DigitSum(n));
system("pause");
return 0;
}
4、 编写一个函数reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符串反向排列
要求:不能使用c函数库中的字符串操作函数
#include<stdio.h>
#include<stdlib.h>
char reverse_string(char* string){
if (*string != '\0') {
string++;
reverse_string(string);
printf("%c", *(string - 1));
}
}
int main() {
char string[30];
printf("请输入一个字符串:");
gets(string);
reverse_string(string);
printf("\n");
system("pause");
return 0;
}
5、递归和非递归分别实现strlen
//递归
int strlen_string(char* str) {
if (*str == '\0') {
return 0;
}
else {
return 1 + strlen_string(str+1);
}
}
int main() {
char str[40];
gets(str);
printf("%d\n", strlen_string(str));
system("pause");
return 0;
}
//非递归求strlen
int strlen_arr(char* arr) {
int n = 0;
while (*arr != '\0') {
arr++;
n++;
}
return n;
}
int main() {
char arr[30];
printf("请输入 一个字符串:");
gets(arr);
printf("%d\n",strlen_arr(arr));
system("pause");
return 0;
}
递归和非递归 分别实现求n的阶乘
//非递归
int main() {
int n, i,k = 1;
printf("请输入一个数 :");
scanf("%d", &n);
for (i = 1; i <= n; i++) {
k = k * i;
}
printf("%d\n", k);
system("pause");
return 0;
}
int fac(int n) {
if (n == 0|| n == 1 ) {
return 1;
}else{
return fac(n - 1)*n;
}
}
//递归
int main() {
int n;
printf("请输入一个数:");
scanf("%d", &n);
printf("%d\n", fac(n));
system("pause");
return 0;
}
递归方式实现打印一个整数的每一位
void print(int n) {
if (n > 9) {
print(n / 10);
}
printf("%d\n", n % 10);
}
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
print(n);
system("pause");
return 0;
}