递归99乘法表js,递归99乘法等于
什么是递归?
调用程序本身的编程技巧叫做递归。
作为一种算法,递归在编程语言中被广泛使用。
一个进程(或函数)在其定义或描述中有一个直接或间接调用自身的方法,通常将一个大而复杂的问题转化为一个与原问题相似的更小的问题来解决;
递归策略只需要少量的程序来描述解题过程中所需的重复计算,大大减少了程序的代码量。
考虑递归的主要方法是最小化大的东西。
递归的两个必要条件
1.有约束:当满足约束时,递归结束;
2.每次递归调用后,它越来越接近这个限制。
示例1:最简单的递归
#包含stdio.h
int main(){
printf(hello world!\ n’);
//递归
main();
返回0;
}最简单的递归问题:堆栈溢出问题——Stack overflow
注:内存区域的简单划分
存储区的简单划分
示例:接受一个整数值(无符号)并按顺序打印它的每一位。
比如:1234,输出1 2 3 4。
#包含stdio.h
作废打印(整数){
if(n 9){
打印(n/10);
}
printf(%d,n);
}
int main(){
无符号int num=0;
scanf(%d ,编号);
//递归
打印(数字);
//打印(1234)
//print(123) 4
//print(12) 3 4
//print(1) 2 3 4
返回0;
}
例:写函数时不允许创建临时变量。求绳子的长度。
考虑临时变量的情况:
方法1:借助库函数
#包含stdio.h
#包含字符串. h
int main(){
char arr[]= bit ;
int len=strlen(arr);
printf(%d\n ,len);
返回0;
}方法2:借助子功能
#包含stdio.h
#包含字符串. h
int my_strlen(char* str){
int count=0;
while(*str!=\0){
数数;
str
}
返回计数;
}
int main(){
char arr[]= bit ;
int len=my _ strlen(arr);
//arr是一个数组;
//数组作为参数传递,不是整个数组,而是第一个元素的地址。
printf(%d\n ,len);
返回0;
}不考虑临时变量:
方法~:使用递归-逆来顺受。
#包含stdio.h
int my_strlen(char* str){
if(*str!=\0){ //第一个元素不是 \0
返回1 my _ strlen(str 1);
}
Else{ //第一个元素为 \0 的情况
返回0;
}
}
//逆来顺受
//my_strlen("bit\0 ")
//1 my_strlen("it\0 ")
//1 1 my_strlen("t\0 ")
//1 1 1 my_strlen("\0 ")
//1 1 1 0
//3
int main(){
char arr[]= bit ;
int len=my _ strlen(arr);
//arr是一个数组;
//数组作为参数传递,不是整个数组,而是第一个元素的地址。
printf(%d\n ,len);
返回0;
}循环法和递归法的比较
例子:求n的阶乘n!
循环模式:
#包含stdio.h
int Fac1(int n){
int I;
int ret=1;
for(I=1;I=n;i ){
ret *=I;
}
返回ret
}
int main(){
int n=0;
int ret=0;
scanf(%d ,n);
ret=fac 1(n);//循环模式
printf(%d\n ,ret);
返回0;
}递归方式:
#包含stdio.h
int Fac2(int n){
如果(n ^ 1){
返回1;
}
其他
返回n * fac 2(n-1);
}
int main(){
int n=0;
int ret=0;
scanf(%d ,n);
ret=fac 2(n);//递归方式
printf(%d\n ,ret);
返回0;
}
注意:递归方法可以用很少的代码实现编程,但是容易出现堆栈溢出,影响效率。
佩纳赫序列
1 1 2 3 5 8 13 21 .
方法1:递归方法
#包含stdio.h
int Fib(int n){
如果(n ^ 2){
返回1;
}
其他
返回光纤(n-1)光纤(n-2);
}
//这种方法效率低,速度慢。
//50
//49 48
//48 47 47 46
//47 46 46 45 46 45 45 44
//.
int main(){
int n=0;//第n个佩波纳奇数
int ret=0;
scanf(%d ,n);
ret=Fib(n);//递归方式
printf(%d\n ,ret);
返回0;
}注意:这里使用的递归方法效率低,速度慢。
方法2:其他
#包含stdio.h
int Fib(int n){
int a=1;
int b=1;
int c=1;
while(n 2){
c=a b;
a=b;
b=c;
n-;
}
返回c;
}
//这种方法效率低,速度慢。
//50
//49 48
//48 47 47 46
//47 46 46 45 46 45 45 44
//.
int main(){
int n=1;//第n个佩波纳奇数
int ret=0;
scanf(%d ,n);
ret=Fib(n);//递归方式
printf(%d\n ,ret);
返回0;
} -结束-
来自。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。