View Full Version : تابع فیبوناچی
  
mamad64bit
چهارشنبه 24 تیر 1388, 13:08 عصر
تابع فیبوناچی به روش بازگشتی کسی میدونه چه شکلی میشه نوشت ؟
kiuhnmgtrdcv
چهارشنبه 24 تیر 1388, 13:27 عصر
البته مثل همیشه این کدی که نوشتم ایراد داره  ولی از لحاظ منطقی روند کلی همینطوری هست 
.model small
.code
main:
    push ds,0
    push 0
    
     PUSH 8     
     call fib
     ret
    
     fib proc
          PUSH BP
          MOV BP, SP
          MOV BX, [BP+4]     ; N
          CMP BX, 0
          JNE notzero
          MOV AX,0
          JMP exit
          notzero:
               CMP BX,1
               Jne else
               MOV AX,1
               JMP exit
               else:
                    DEC BX         ; N-1
                        PUSH BX        
                        CALL fib       
                        MOV DX, AX     
                        POP BX    
                        
                        PUSH DX     
                        DEC BX          ; n-2
                        PUSH BX          
                        CALL fib         
                        POP BX       
                        POP DX           
                        ADD AX, DX    ; fib(n-1) + fib (n-2)
                       
                    exit:
                         pop bp
                         ret 
     endp
end
mamad64bit
چهارشنبه 24 تیر 1388, 13:32 عصر
میشه در مورد تابع بازگشتی بیشتر توضیح بدید
kiuhnmgtrdcv
چهارشنبه 24 تیر 1388, 13:35 عصر
دوستان از من اطلاعات بیشتری دارند ولی این ناچیز دانسته های من 
در نوشتن تابع بازگشتی باید به این نکته توجه کنیم که برخلاف سایر توابع که اخرشون به تعداد پارامترها ret میکردیم اینجا فقط یک ret خواهیم داشت 
در تابع بازگشتی چون یک تابع درون یک تابع دیگر صدا زده میشه باید بعد از صدا زدن ان تابع در صورت داشتن پارامتر به تابع و push کردن انها به تعداد push ها pop هم کنیم یا به مقدار push ها به sp اضافه کنیم من خودم روش اول ترجیح میدم چون اصلاعات بیشتری میشه کسب کرد
proc sample
 push bp
 push bp,sp
 
 push ax,[bp+6]
 push bx,[bp+4]
 
 push ax
  dec ax
  push ax
  call sample
  pop cx
 pop ax
 
 یا
 
 push ax
 dec ax
 push ax
 call sample
 add sp,4
 
 اگر سه تا پارامتر داشتیم
 add sp,6
Open-Source
چهارشنبه 24 تیر 1388, 20:13 عصر
این به زبان C++ 
//*************** Fibonacci **************
//****************************Show Number In Series(1,1,2,3,5,8,13,21,...)
# include <iostream.h>
# include <conio.h>
//-----------------------------------------------
int fib(int n){
if (n<=2) return(1); else return(fib(n-2)+fib(n-1));
}
//------------------------------------------------
void main(){
clrscr();
int n;
cout<<"Enter N: ";
cin>>n;
cout<<"\n\nFibonacci Series: "<<fib(n);
getch();
}
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.