代码是一门艺术,键盘是我的画笔。
3.递归和迭代(循环就是一种迭代,迭代不仅仅是循环)
·求n!
递归方式:
n!---> 1 (n=1); n*(n-1)! (n>=1)
#include <stdio.h>
//n!-->递归方式
int fac(int n)
{if (n <= 1)return 1;elsereturn n * fac(n - 1);
}
int main()
{int n = 0;scanf("%d", &n);int ret = fac(n);printf("ret=%d\n", ret);return 0;
}
迭代方式(非递归):
#include <stdio.h>
//n!-->迭代方式
int fac(int n)
{int i = 0;int ret = 1;for (i = 1; i <= n; i++){ret *= i;}return ret;
}
int main()
{int n = 0;scanf("%d", &n);int ret = fac(n);printf("ret=%d\n", ret);return 0;
}
·求第n个斐波那契数(不考虑溢出)
斐波那契数列:1 1 2 3 5 8 13 21 34 55 ……
即等于前两个数之和
递归方式(但是效率很低,数字越大运算时间越长):
Fib(n)(斐波那契数)---> 1 (n<=2); Fib(n-1)+Fib(n-2) (n>2)
#include <stdio.h>
//递归方式
int Fib(int n)
{if (n <= 2)return 1;elsereturn Fib(n - 1) + Fib(n - 2);
}
int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d\n", ret);return 0;
}
迭代方式:
#include <stdio.h>
//迭代方式
int Fib(int n)
{int a = 1;int b = 1;int c = 0;while (n >= 3){c = a + b;a = b;b = c;n--;}return c;
}
int main()
{int n = 0;scanf("%d", &n);int ret = Fib(n);printf("%d\n", ret);return 0;
}