用编写递归算法求1到n的和. 用编写递归算法求1到n的平方和 .用递归算法求一个数组中n个单元的和

作者&投稿:终思 (若有异议请与网页底部的电邮联系)
编写一个递归算法,求长度为n的一维数组中的最大元素。~

楼上的代码写得有点繁琐,其实一个简单的if结构就可以实现这个递归。
#include

using
namespace
std;
int
max(int
[],int);
//
max函数原型
int
main()
{
int
a[10]={1,3,8,2,4,9,5,7,6,0};
cout
<<
"a数组最大元素为:"
<<
max(a,10)
<<
endl;
return
0;
}
int
max(int
arr[],
int
size)
//
max函数定义
{
if
(size
==
2)
return
arr[0]
>
arr[1]
?
arr[0]
:
arr[1];
else
return
max(arr,size
-
1)
>
arr[size
-
1]
?
max(arr,size
-
1)
:
arr[size
-
1];
}

(不必用递推关系,更高效,严格按照你的函数定义):
#include

float ave(int n)
{
static int tag=n;
float t;
scanf("%lf",&t);
if(n==1)
return t;
else if(tag!=n)
return t+ave(n-1);
else
return (t+ave(n-1))/n;
}

int main()
{
printf("%f",ave(3));/* 输入三个数 回车,自动计算平均值 */
}

class Test
{
//1到n和的递归方法
public static int add(int max){
int sum=0;
if(max>0){
sum=max+add(max-1);
}
return sum;
}

//1到n平方和的递归方法
public static int squr(int max){
int sum=0;
if(max>0){
sum=max*max+squr(max-1);
}
return sum;
}

//数组元素之和
public static int arraySum(int[] array){
int sum=0;
for(int item:array){
sum+=item;
}
return sum;
}
//主函数
public static void main(String[] arg){
int n=5;
int[] a={1,2,3,5,7,10,12};
System.out.println("从1到"+n+"的和为:"+Test.add(n));
System.out.println("从1到"+n+"的平方和为:"+Test.squr(n));
System.out.println("数组元素之和为:"+Test.arraySum(a));
}
}

#define DATA 5

/****************************************/

int find_sum1(int n)
{
int sum1=0;
if(n==1) { return 1; }
else { sum1 = n + find_sum1(n-1);}

return sum1;
}

/*****************************************/

int find_sum2(int n)
{
int sum2=0;
if(n==1) { return 1; }
else { sum2 = n*n + find_sum2(n-1);}

return sum2;
}

/*****************************************/

/*****************************************/

int find_sum3(int *num,int n)
{
int sum3=0;
int index;
index = n-1;
if(n==1) { return num[0]; }
else { sum3 = num[index] + find_sum3(num,n-1);}

return sum3;
}

/*****************************************/

main()
{
int i;
int n=DATA;
int num[DATA];
int sum1,sum2,sum3;

for(i=0;i<DATA;i++) { num[i] = i; }

printf("n = %d\n\n",n);

sum1=find_sum1(n);
printf("sum1 = %d\n",sum1);

sum2=find_sum2(n);
printf("sum2 = %d\n",sum2);

sum3=find_sum3(num,n);
printf("\n\nnum = ");
for(i=0;i<DATA;i++) { printf(" %d ",num[i]); }
printf("\nsum3 = %d\n",sum3);

getch();
}

#include<iostream>

using namespace std;

int recurision(int n)//求1到n的和
{
if(n==1)
return 1;
else
return n+recurision(n-1);
}

int recurision2(int n)//求1到n的平方和
{
if(n==1)
return 1;
else
return n*n+recurision2(n-1);
}

int recur_array(int *p,int n)//一个数组中n个单元的和
{
if(n==1)
return p[0];
else
return p[n-1]+recur_array(p,n-1);
}

int main()
{
int n;
int *p;
char ch;
cout<<"请输入n的值:\n";
cin>>n;
while(n<1)
{
cout<<"不合法的输入!"<<endl;
cout<<"你想重新输入吗?\n";
cin>>ch;
if(ch=='y'||ch=='Y')
cin>>n;
else
return 0;
}
cout<<"1到n的和:"<<recurision(n)<<endl;
cout<<"1到n的平方和:"<<recurision2(n)<<endl;
p=new int [n];
cout<<"请依次输入各个数值:\n";
for(int i=0;i<n;i++)
cin>>p[i];
cout<<"数组中n个单元的和:"<<recur_array(p,n)<<endl;

return 0;
}


使用递归算法求Fibonacci数列的第n项,第一项是1,第二项是1,第n项是前...
int F(int n){ int a=1,b=1;for(int i=2;i<=n;i++){ int c=a+b;a=b;b=c;} return b;} 其实还有一种方法,是利用二维矩阵{1 1}{1 0}的幂实现的,对数时间复杂度。如果感兴趣可以查一下,网上资料很多的。由于代码太长,我这里就不写出来了 ...

Java用递归实现3.根据规律写出计算算法:1、7、8、15、23、38、61...
• 因此,第三项是8,第四项是15,第五项是23,以此类推。这是一个典型的递归问题,可以通过递归算法来解决。具体实现代码如下:在上面的代码中,我们定义了一个getNumber方法,该方法接受一个整数n作为参数,返回数列中第n位的值。在该方法中,我们使用了递归算法,把求第n位的值转化为了求...

...1、2、3、5、8、13、21、34... 求第30位数是多少, 用递归算法...
代码如下:public class Test { public static void main(String[] args) { System.out.println("结果是:"+Test.foo(30));} \/ 常见解法 \/ public static int foo(int i){ int a=1,b=1;int c=0;for(int k=2;k

时间复杂度怎么算例题
return1;else returnn*fact(n-1);} 以n=3为例,看运行过程如下:fact(3)---fact(2)---fact(1)---fact(2)---fact(3)递归回溯 递归算法在运行中不断调用自身降低规模的过程,当规模降为1,即递归到fact(1)时,满足停止条件停止递归,开始回溯(返回调用算法)并计算,从fact(1)=1计算返回...

...1、2、3、5、8、13、21、34... 求第30位数是多少, 用递归算法...
思路:第N个数是第N-1 和第N-2个数的和 N>2public class MainClass { public static void Main(){ Console.WriteLine(Foo(30));} public static int Foo(int i){ if (i <= 0)return 0;else if(i > 0 && i <= 2)return 1;else return Foo(i -1) + Foo(i - 2);} } ...

用C++递归算法解一道题
{\/\/基例为最后一个,添加一个参数k向上增 if(n-1==k)return a[n-1];else return HuoNa(a, n, k+1, x0)*x0+a[k];} --- \/*本程序利用霍纳规则计算型如:*\/ \/*p(x)=AnX*\/ include<iostream.h> \/*函数1(非递归算法)*\/ double heNaFunction_1(double Array[], double x, ...

...1、2、3、5、8、13、21、34... 求第30位数是多少, 用递归算法...
直接使用通项公式来计算.递归公式:a(1)=1;a(2)=1;a(n)=a(n-1)=a(n-2)如果项数非常巨大时,递归非常缓慢,要用到矩阵加速.

{0,1,2...n-1}有这样一个自然数的集合,如何用C语言来实现对此自然数集合...
你这题其实最主要的是算法问题,算法解决了,则编写程序就相对容易了。我这里给出一个递归算法,你不妨可以去试试。对于n=1时,情况比较简单,可以直接求解。当n为任意值时,先递归对n-1进行求解,再求n的解。于是算法如下(设算法函数为void Divide(int n)):1 当n=1时,直接求解,结束;2...

请教VB大神两道递归算法的题,谢谢啦 一是输入一个十进制整数,将它转...
Private Sub Command1_Click() Label3.Caption = "转换后的" & Val(Text2.Text) & "进制数为" + Transformation(Val(Text1.Text), Val(Text2.Text))End SubPrivate Function Transformation(ByVal n As Long, ByVal k As Integer) As String If n <> 0 Then r = n Mod k ...

用递归算法求n个数中的最大数及其位置 c++
) { return numbers[index]; \/\/到最后位直接返回最后位就是最大的 }; else { return -1; \/\/数组越界时返回-1 };};void main(void){ int numbers[]={1,3,8,2,4,6}; int N=6; int R = max(N,numbers,0)); for (int i = 0; i < N; ++i) { if (number[i]...

安定区18530159848: C语言编程问题!!急用... 用递归算法编写,求1到n的累加和,在主函数中调用 -
采蓉瑞高: #include <stdio.h> int fun(int n) {int sum = 0;if (n == 1)sum = n;elsesum = n + fun (n-1);return sum; }void main() {int n;scanf("%d",&n);printf("%d",fun(n)); }

安定区18530159848: C语言.编写程序,用递归函数完成,求整数1+……+n的和,其中n自己输入.. -
采蓉瑞高: #include int sum(int); int main() { int n; scanf("%d", &n); printf("1+...+%d = %d", n, sum(n)); return 0; } int sum(int x) { if(x==1) { return 1; } else { return x+sum(x-1); } }

安定区18530159848: 用递归算法编写,求1到n的累加和,在主函数中调用?源程序已经有了希望给出程序框图和解题思路 -
采蓉瑞高: String.prototype.sub = function (n) { var r = /[^\x00-\xff]/g; if (this.replace(r, "mm").length// n = n - 3;var m = Math.floor(n / 2); for (var i = m; iif (this.substr(0, i).replace(r, "mm").length >= n) { return this.substr(0, i); }

安定区18530159848: 独立编写JAVA程序,采用递归的方法求1至n的和. 要求: 1.n从键盘输入;2.当输入Y时结束程序的执行; -
采蓉瑞高: import java.util.Scanner; public class Test { public static int sum(int n){ if(n==1) return 1; return n+sum(n-1);} public static void main(String[] args){while(true){ System.out.println("请输入一个数字,或者输入Y退出:"); String s = new Scanner...

安定区18530159848: 1、 设计一个递归算法,返回1至n之间的所有整数立方的和. -
采蓉瑞高: int he =0;//定义成员变量 存储所有立方的和 int qiuhe(int n){//定义成员方法 he =n*n*n+qiuhe(n-1); if(n==1) { ruturn he; } //ok,我用的java不知道你用的是什么语言,但是思路都是一样的,希望对你有所帮助

安定区18530159848: 用递归的方法编写一函数sum(int n),求1至n的累加和
采蓉瑞高: int sum(int n){ if (n == 0) return (0); else return (n+sum(n-1));}

安定区18530159848: 、编写一个递归函数unsigned sum(unsigned n)求1到n的所有整数的和(即1+2+…+n),在主函数中调用它计算
采蓉瑞高: 例:输入4个整数,找出其中最大的数. #include stdio.h void main() { int max_4(int a,int b,int c,int d); int a,b,c,d,max; printf("Please enter interger numbers:"; scanf("%d%d%d%d",a,b,c,d); max=max_4(a,b,c,d); printf("max=%d \n",max); } ...

安定区18530159848: c++ 函数递归求1到n之和 -
采蓉瑞高: #include void main(){ int f(int i); int sum,n; printf("输入n:"); scanf("%d", sum=f(n); printf("sum=%d",sum);}int f(int i){ if(i=...

安定区18530159848: 用递归法求1到n的和,不用循环,不用if...else,不用switch,不用三目运算符,求高手解. -
采蓉瑞高: 利用方程式:Sn = (n/2)(2a+(n-1)d) Sn 是总和 a是起始号码,置入1 d是间隔,置入1 所以就是 Sn = (n^2 + n )/2

安定区18530159848: 用递归算法,求1+2+3+······+n,n由键盘输入. 用C语言程序编写.
采蓉瑞高: int fun(int m) { if(m==1) return 1; else return m+fun(m-1); } void main(){ int x; scanf("%d",&x); printf("%d\n",fun(x)); } 你自己好好分析一下,相信你能写的出来,这是最基本的!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网