1.递归和非递归分别实现求第n个斐波那契数
(1)非递归条件下实现
//非递归实现
#include <stdio.h>
#include <stdlib.h>
int fib(int n){
if (n == 1 || n == 2) {
return 1;
}
int last2 = 1;
int last1 = 1;
int result = 0;
for (int i = 2; i < n; i++){
result = last1 + last2;
last2 = last1;
last1 = result;
}
return result;
}
int main(){
printf("%d\n", fib(40));
system("pause");
}
(2)递归条件下实现
#include <stdio.h>
#include <stdlib.h>
int fib(int n){
if (n <= 2){
return 1;
}
return fib(n - 1) + fib(n - 2);
}
int main(){
int n = fib(5);
printf("%d\n", n);
system("pause");
}
2.递归和非递归分别实现strlen
//递归函数实现strlen
#include <stdio.h>
#include <stdlib.h>
int Strlen (char* str){
if (*str == '\0'){
return 0;
}
return 1 + Strlen(str + 1);
}
int main(){
char a[] = "abcdef";
int len = Strlen(a);
printf("字符串长度为:%d\n", len);
system("pause");
}
//非递归实现strlen
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Strlen(char* str){
int len=0;
while (*str){
if (*str != '\0'){
len++;
str++;
}
}return len;
}
int main(){
char a[] = "abcef";
int len = Strlen(a);
printf("字符串长度为:%d\n", len);
system("pause");
}
3.递归和非递归分别实现求n的阶乘
//使用递归求n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fac(int n){
if (n <= 1){
return 1;
}
return n * Fac(n - 1); //把n的阶乘看成n*(n-1)的阶乘,以此类推
}
int main(){
int n = 0;
printf("输入n的数值:");
scanf("%d", &n);
int result = Fac(n);
printf("n的阶乘为:%d\n", result);
system("pause");
}
//非递归实现n的阶乘
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int Fac(int n){
int result = 1;
while (n > 1){
result *= n;
n--;
}
return result;
}
int main(){
int n = 0;
printf("输入n的数值:");
scanf("%d", &n);
int result = Fac(n);
printf("n的阶乘为:%d\n", result);
system("pause");
}