大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
C语言递归实现数组求和
一.基本思想(分而治之):
- 基线条件:
显然最简单的情况:数组只有一个数时,无需任何操作,直接返回其值即可;
所以基线条件为数组长度为1; - 递归条件:
每一次加上数组最后一位并缩短数组长度以丢掉它;
二.问题及解决
- 数组的输入问题:怎么实现让自己输入自己想求得的数组的和,而不是只能求固定数组。
解:利用c99变长数组,自己输入数组长度和具体数字;(缺陷:需要用户数自己数字的长度,未解决) - 递归的条件中,每一次应该在上一次调用的基础上减一,最好定义新的变量,避免此问题;
#include <stdio.h>
int sum(int a[],int len);
int main()
{
int i,len;
printf("Enter the len:");
scanf("%d",&len);//利用变长数组,先输入求和数组的长度
int a[len];
printf("Enter the number:");
for(i=0;i<len;i++){
scanf("%d",&a[i]);
}//输入数组的具体数字
int sumall;
sumall=sum(a,len);
printf("the sum of your number is %d",sumall);//求和并输出
}
int sum(int a[],int len)
{
if(len==1)//基线条件
return a[len-1];
else{
int n=len-1 ;
return a[n]+sum(a,len-1);//用n替换len-1;避免a[len-1]后误以为应该是+sum(a,len-2);递归调用,传入参数每次改变1;
}
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186735.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...