一、递归和非递归分别实现求第n个斐波那契数
斐波那契数:
亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列、费波那西数列、费波拿契数、费氏数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波那契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加。
接下来我们看看代码:
#include<stdio.h>
#include<stdlib.h>
#pragma warning (disable:4996)
int fib1(int a)
{
if (a <= 2)
{
return 1;
}
else
{
return (fib1(a - 1)+fib1(a - 2));
}
}
int fib2(int a)
{
int i = 1;
int j = 1;
int k = 0;
while (a> 2)
{
k = i + j;
i = j;
j = k;
a--;
}
return k;
}
int main()
{
int a;
printf("please enter num:");
scanf("%d", &a);
printf("%d\n", fib1(a));//使用递归的方法实现
printf("%d\n", fib2(a));//使用迭代的方法
system("pause");
return 0;
}
二、递归和非递归分别实现求n的阶乘
int fib1(int a)
{
if (a <= 1)
{
return 1;
}
else
{
return a*fib1(a - 1);
}
}
int fib2(int a)
{
int result = 1;
while (a > 1)
{
result*= a;
a-=1;
}
return result;
}
int main()
{
int a;
printf("please enter num:");
scanf("%d", &a);
printf("%d\n", fib1(a));//使用递归的方法实现
printf("%d\n", fib2(a));//使用迭代的方法
system("pause");
return 0;
}
三、递归和非递归分别实现strlen
int strlen(const char*p)
{
if (*p == '\0') //若为'\0'直接返回
{
return 0;
}
else //否则就1+剩下的字符串长度
{
return 1 + strlen(p + 1);
}
}
int strlen1(const char*p)
{
int count = 0;
while (*p!='\0') //*p没有指向'\0'
{
count++; //count++
*p++; //指针依次指向下一个
}
return count;
}
int main()
{
char *p = "abdnce";
printf("%d\n", strlen(p)); //递归
printf("%d\n", strlen1(p)); //迭代
system("pause");
return 0;
}