用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n

用C语言编写一个递归程序用来计算:1*2+2*3+3*4+.+(n-1)*n,第1张

用C语言编写一个递归程序用来计算:12+23+34++(n-1)n

int fun(int n){
if(n==2){
return 2;
}else{
return fun(n-1)+(n-1)n;
}
}
int main(int argc, char argv[])
{
printf("fun(3)=%d\n", fun(3));
return 0;
}

编写一个递归子程序 计算N! (N)=0)的程序 最好用C语言

这样写: #include<stdioh> long fun(int n); void main() { int n; printf("请输入n的值:\n"); scanf("%d",&n); printf("这个数的阶乘是:%d\n",fun(n)); } long fun(int n) { if(n==1 || n==0) return 1; else return nfun(n-1); }
采纳哦

用汇编语言编写“计算1+23+34+N(N+1)”的程序

M equ 自行定义,界定循环次数
N equ #2
S equ #1
Start:LDA #(N-1)
Loop:INCA ;A寄存器值加一
MOV A,B ;把A寄存器值放到B寄存器中
INCB
JSR Count ;跳转到Count子程序,进行计算
CMPA #M ;判断循环条件
BLO loop ;小于M的话继续循环
Print:输出
Count:MUL A,B
RTS
对应C代码如下:
#Define M 自行定义,界定循环次数
main()
{
int S=1;
int N;
for(N=2;N<M;N++)
{
S+=N(N+1);
}
printf("d%",S);
}

谁能跟我编写一个程序(C语言)题目是编写一个函数计算sum(n)=1+2+3+。+n(n>=1)

int Cal(int n)
{
sum=0;
for(int i= 1;i<=n;++i)
sum+=i;
return sum;
}

求1×2+2×3+3×4++(n-1)×n

先提供一个特殊数列的前n项和公式:
1+4+9+16+……+n² = n(n+1)(2n+1)/6
再看题目中的
(n-1)×n = n² - n
因此,
原式= [1+4+9+16+……+n²] - [1+2+3+4+……+n]
=n(n+1)(2n+1)/6 - n(n+1)/2
=n(n+1)(n-1)/3

用汇编语言编写“计算1+23+34+N(N+1)且N(N+I)<200”的程序

code segment
assume cs:codestart:
mov cx,1
mov ax,2
next:
cmp cx,200
jge exit
inc al
mov bl,al
dec bl
mul bl
add cx,ax
mov ax,0
mov al,bl
inc al
jmp next
exit:
mov al,bl AAM
mov dl,ah
mov bl,al
add dl,30h
mov ah,2
int 21h
mov dl,bl
add dl,30h
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start

编写递归程序,计算n! m!

看到有人写帖子问如果从m个数组中取N个原始的算法,要求一个是递归的,一个不是递归的。
递归的解法:(比较笨)
void getn(int a[], int b[] , int m, int n, int index,int lastindex)
{
int i = lastindex + 1;
if(index == n )
{
int x;
for(x = 0 ; x <</span> n ;x ++)
{
printf(" %d ",a[b[x]]);
}
printf(" ");
return ;
}
while( i <</span> m)
{
b[index] = i;
getn(a,b,m,n,index + 1,i);
i ++ ;
}
}
非递归的解法:

void agen(int a[],int m, int n)
{
int i ,j ;
int b[100] = {0};
i = j = 0;
while(b[0] <</span> m ) {
while( i <</span> m) {
if(j == n - 1 ) {
int x ;
for( x = 0 ; x <</span> n ; x ++) {
printf(" %d ",a[b[x]]);
}
printf(" ");
} else {
j ++;
}
i ++;
b[j] = i;
}
do {
j --;
b[j] ++ ;
} while(b[j] >= m );
i = b[j] ;
}
}
测试的主程序:
int main()
{
int a[10] = {0, 1,2,3,4,5,6,7,8,9};
int b[20] ={0};
getn(a,b,10,5,0,-1);
agen(a,10,5);
return 0;
}

用PASCAL语言编写一个求1+2+3++N的程序

var s,i,n:long;
begin
write('N=');
readln(n);
s:=0;
for i:=1 to n do
s:=s+i;
writeln(s);
end

编写计算(1+2-3+4-5+。-(n-1)+n)的程序

你好 我来回答你的问题
其实很好解决 用-1这个特殊的数来做
main()
{ int i,j=1,k=0;
for(i=1;i<=100;i++)
{ j=-1j;
k=ji+k; }
printf("%d",k);
getch();
}
看懂了吗 每回循环j都乘一次-1 也是j就从-1,1,-1,1来回变幻
你再乘以i i不就是正数负数的各一个变一次了吗 对吧?
我的C语言群34811055有什么问题可以加 还有我的QQ415654090

用VB程序编写一个过程来计算1+2+3+4+……+100的值。

Dim a As Integer '首项
Dim b As Integer '末项
Dim c As Integer '项数
Dim d As Integer '结果
Public Sub Add()
a = InputBox("首项", "")
b = InputBox("末项", "")
c = InputBox("项数", "")
d = (a + b) c / 2
MsgBox d
End Sub
Private Sub Form_Load()
Call Add
End Sub
针对这个问题首项=1,末项=100,项数=100
end sub

观察NODE_ID,可以得到一个规律,就是从右边去掉三个字符后,可以得到它的父NODE_ID,我们先称其为PARENT_NODE_ID吧,
对于TreeNode的成员中,有一个属性,Text,我们用来保存ADDRESS_NAME,还有一个不常用的两个属性,Tag,ToolTipText随便哪个保留NODE_ID,然后,根据PARENT_NODE_ID得到父节点,在父节点上加入一个新的节点,查找节点时,做一个递归就行了
还有一个问题,因为TreeNode,与TreeView不一样,所以方法还得重载,
就是重载的方法被递归

这样就行了 aa方法会从输入字符串s中抽出2个字符组合的所有可能性。并且返回总共有多少种可能。

public class DFfsd {
public static void main(String[] args) {
String s="1234";
Systemoutprintln(aa(s, 0, 1));
}
public static int aa(String s,int x,int y){
int t=0;
if(y==slength()){
x++;
if(x<slength()-1){
y=x+1;
}
}
if(x<slength()-1){
Systemoutprintln((char)scharAt(x)+" "+(char)scharAt(y));
t=aa(s,x,y+1)+1;
return t;
}
return 0;
}
}

这个百度把符号变了

public class DFfsd {
public static void main(String[] args) {
String s="1234";
Systemoutprintln(aa(s, 0, 1));
}
public static int aa(String s,int x,int y){
int t=0;
if(y==slength()){
x++;
if(x&amp;lt;slength()-1){
y=x+1;
}
}
if(x&amp;lt;slength()-1){
Systemoutprintln((char)scharAt(x)+" "+(char)scharAt(y));
t=aa(s,x,y+1)+1;
return t;
}
return 0;
}
}

如果一个函数在内部可以调用其本身,那么这个函数就是递归函数。
简单的说 递归就是函数的内部自己调用自己,这个函数就是递归函数。
递归函数不断的一遍又一遍的调用自己,效果类似于循环,同样也和循环有一样的特点,那就是怕死循环。
在递归中叫"栈溢出"错误(stack overflow),所以必须要加退出条件 return。

再来个栗子:

刚开始的我会把fn(n-1)这里写成 n+1 想当然的觉得 1 2 或者 2 3 这样的不也是一样吗 但是执行完发现显示的是栈溢出
到这我才发现我还是不理解递归的返回条件
于是我自己分析了一下:

发现了吗 没有条件的中断与返回 自己觉得就是求一下3的阶乘 但实际求的是从3开始的和3++的阶乘

而写成n-1 求的是从3开始 与3--的阶乘 一直求到有一个中断条件 n==1 返回了1为止
这样的话 可以在上限加一个中断返回值

这样的话 算的就是从2到5的阶乘结果是和n-1那个 fn(5)的值是一样的 值都是120

那么说到递归就自然而然的要说到斐波那契数列(兔子序列)了:
简单的说就是前两项相加的值等于后面那个数的值
1、1、2、3、5、8、13、21
要求:用户输入一个数字n就可以求出 这个数字对应的兔子序列的值

于是 自恃天才的我 想到了为什么不直接写
renturn fn(n-1)+fn(n)呢?
我输出了一下 又是栈溢出!
现实是啪啪的打脸 玛德制杖 自己推算一下 搜戴斯内

fn(3)算个没完没了 我们并没有终结它
在这里我用自己的语言 浅显的、简单的总结一下 正确的递归 要有初始值 还要明确结束值 递归的方向也要清楚
递归的方向就是中断的条件 就是结束值的方向 朝着中断的条件总不会错
就如同X轴 Y轴的折线图一样
比如上面那个阶乘 我的nfn(n+1)的错误在于没有弄清楚方向 让它一直走一个向上的箭头 向上还没有封顶 它自然会栈溢出 。
再比如刚才这个斐波那契数列 我是让它在X轴水平向右无限延伸 水平方向我也没有设置中断 它也会栈溢出
但愿今晚的两杯酒饮料不至于让我在这说胡话 [苦笑]

提供思路,如果使用递归,主要针对阶乘,因此,在主函数里提供十个数相加,用循环,然后重新定一个函数,在函数里提供递归的算法,即不断调用直至结束得到结果,然后相加就行。
如果不是使用递归,可使用上一次的结果乘以新增的数字,然后依次相加即可。

嗯,你可能理解错了,不是最终最终执行08条,而是在任何一次的递归调用结束之后都有可能从这个地方返回。我来讲解一下吧,如果这棵树非空,而且存在左子树,那么的确会在第5行一直走到最左下的叶子,在到达最左下的叶子之后的那一次递归(此时root->lchild==null,调用heightbt(root-lchild)),root==null,那么返回0,此时递归返回一层,也就是返回到最左下的叶子处,此时LH=0,继续执行heightbt(root->rchild),那么类似刚才的过程继续检查右子树。其实递归的话没有必要去追究每一步都是怎么执行的,而是要从整体上去把握他的思想。写递归的时候也是这样,不太可能去细究每一步应该怎么实现,而要认为只要条件设置正确,那么一定会正确的实现递归。另外,楼主要注意一下编程风格。

#include <stdioh>#include <stdlibh>#include <timeh>#define N 10float a[N];float aver(int n){ float average; if(n==0) average=a[0]; else average=(a[n]+aver(n-1)(n-1))/n; return average}void main(){ float ave; int i; printf("Please input array:\n"); srand(time(NULL)); for(i=0;i<N;i++) { a[i]=rand()%100; printf("a[%d]:%10f\n",i,a[i]); } ave=aver(N); printf("\naverage is :%12f\n",ave);}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10289010.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存