1.本题要求实现一个用递归计算1+2+3+…+n的和的简单函数。
2.什么是递归?
函数的内部自己调用自己,(反复调用自身函数)
函数接口定义:
int sum( int n );
该函数对于传入的正整数n返回1+2+3+…+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数
原理:
1.利用return 变量; 返回一个变量
int summ(){
int c=10;
return c;
}
int main(){
printf("%d",summ());//执行summ();函数,返回是一个变量c(带着实际值),再用%d,打印出来
return 0;
}
return 直接数字,不能打印出来,
return 0; 完成本函数 //main(); 完成main();
就是结束这个函数了
return 1; 函数非正常终止(不再执行函数了)
代码:
#include<stdio.h>
int sum(int n){ //
if(n>0){
return n+sum(n-1); //这里返回值是:
//函数返回的是变量
//n+n-1+n-2+n-3+n-4....(所有变量相加,)
}else{
return 0;//结束这个函数
}
}
int main(){
int n;
scanf("%d",&n);
printf("%d",sum(n));//
//sum(n)相当于:n+n-1+n-2+n-3+n-4...
return 0;
}
效果图:
2.在尝试用递归函数:1*2…n(连续相乘)
这里注意:
sum(){} //
return 1;//这里如果用return 0;就实现不了
#include<stdio.h>
int sum(int n){
if(n>=1) {
printf("执行了多少次\n");
return n*(sum(n-1));
// printf("")
}else{
return 1;//这里如果用return 0;就实现不了 ,系统可能把它当成 布尔类型:0是假,1是真
printf("没有执行!\n"); // return 1;之后的语句没有执行
}
}
int main(){
int n;
scanf("%d",&n);
printf("%d",n);
printf("连续相乘结果是%d",sum(n));
return 0;
}
效果图: