汇编递归X的n次方,高手帮忙

编写一递归子程序,计算X的n次方的值

assume cs:code,ds:data
;============================================
data segment
base dw 6 ;底数
index dw 4 ;指数
result db 5 DUP (?),'$' ;结果
data ends
;============================================
code segment
;--------------------------------------------
;用递归求M的N次幂
;输入:
;第一个PUSH=底数
;第二个PUSH=指数
;输出:
;AX=结果
;--------------------------------------------
power proc
push bp

mov bp,sp
add bp,4

mov ax,[bp]
cmp ax,1
jz Return

dec ax
push [bp+2]
push ax

call power
mul word ptr [bp+2]

pop bp
ret 4

Return:
mov ax,[bp+2]

pop bp
ret 4

power endp
;--------------------------------------------
start:
mov ax,data
mov ds,ax

push base
push index

call power
;---------------------以上计算结果
mov bx,offset result+4
mov cx,10

DivCircle:
xor dx,dx
div cx
add dl,30H
mov [bx],dl
dec bx
cmp ax,0
jnz DivCircle

inc bx
mov dx,bx
mov ah,09H
int 21H
;---------------------以上计算结果的ASCII,并显示
mov ah,07H
int 21H
mov ax,4C00H
int 21H
;--------------------------------------------
code ends
;============================================
end start

我特地在CSDN问了一下,我写的这个程序是递归程序
我试了N次,只要结果不超过AX能表示的最大的数的话,结果就是对的
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-07
汇编语言 - 利用循环求2的n次方
; 利用循环求2的n次方
fun_loop proc near c,
n:dword; n次方
mov ax, 2; 从1次方开始
mov dx, 2; 乘数
mov ecx, n; 循环计数器置n
sub ecx, 1; 次数到n-1次为止
jecxz loop_exit; Jump if ECX is zero, 计数器减到0时退出循环
loop_start:
imul ax, dx; 乘以2
loop loop_start; 循环
loop_exit:
ret; 返回
fun_loop endp

; 调用格式
; printf("fun_loop: 2^10=%d\r\n", fun_loop(10));
第2个回答  2009-07-07
假设算了以后不超过65535,也就是假设不用到DX

mov ax, X
mov cx, n
dec cx
L1:
mul ax
loop L1

到这里ax的值就是X的n次方
第3个回答  2009-07-07
看错题目了.
mov ax, X
mov cx, n
L1:mul ax
loop L1
这也不是递归!

汇编递归X的n次方,高手帮忙
end start 我特地在CSDN问了一下,我写的这个程序是递归程序 我试了N次,只要结果不超过AX能表示的最大的数的话,结果就是对的

用递归函数求X的n次方,请高手帮帮忙,谢谢!
double fun(double x,int n){ if(n==1)return x;else return x*fun(x,--n)}

编程计算X的n次方。要求:用递归函数,用TC编译
printf("%lf^%d=%lf\\n",a,b,pow(a,b));} 这个代码是对的。

编写求x的n次方的递归函数
main()中scanf(%f%d",&x,&n);printf("%f",m);你先把格式改好再试试

C 用递归函数求x的n次方
两个错误:1、按算法n小于0时,y=1\/(fun(x,n+1)*x);2、第二个条件应该为else if(n==0)如果是n=0,则成赋值表达式,该表达式为0即假,因此陷入死循环。

利用递归调用,求解X的N次方
int XN(int x,int n){if(n==1) return x;return x*XN(x,n-1); }void main(){int x,n;scanf("%d %d",&x,&n);printf("%d",XN(x,n));} 热心网友| 发布于2013-06-26 举报| 评论 0 0 为您推荐: 递归调用。 递归调用的实际 递归调用实例 递归函数 什么是递归 递归调用缺点 ...

编写求x的n次方的递归函数,并在主函数中调用它
include<stdio.h>double mypow(double x,int n){if(n==0)return 1; if(n>0)return x*mypow(x,n-1); else return mypow(x,n+1)\/x;}int main(){double x; int n; scanf(("%lf%d",&x,&n); printf("%lf\\n",mypow(x,n)); return 0;} ...

设计一递归函数计算x的n次方。
你参考下.如果需要整形的话将类型改下就可以了.#include< stdio.h >double power(double x,int y){ if(y==0) return 1.0;return power(x,y-1)*x;}int main(){ int y;double x;scanf( "%lf%d", &x, &y );printf( "%.2lf\\n", power( x, y ) );} ...

1、编写递归函数求x的n次方, 并调用此函数求2的5次方。
while(n=0);改成while(n>0);

试编写求x的n次方的递归函数,并在主函数中调用它
include"stdio.h"double fun(double x,int n){ if(n==0) return 1;else return x*fun(x,n-1);}main(){ int n;double x;printf("输入x和n:");scanf("%lf%d",&x,&n);printf("%lf\\n",fun(x,n));}

相似回答