آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

درخواست راهنمایی در رابطه با الگوریتم فیبوناچی

وحید گروسی  5 سال پیش  5 سال پیش
+1 0

با سلام و احترام؛
من با جستجو به الگوریتم زیر برخوردم نمیدونم دقیقاً دلیل استفاده از b چی هست میدونم عدد دوم هست ولی فقط تو جمع استفاده شده و متوجهش نمی شم ممنون میشم کسی راهنمایی کنه

// Usage
val n = 8
val first = BigInteger("0")
val second = BigInteger("1")

println(fibonacci(n, first, second))
Code
fun fibonacci(n: Int, a: BigInteger, b: BigInteger): BigInteger {
return if (n == 0) a else fibonacci(n-1, b, a+b)
}
 برای این سوال 2 پاسخ وجود دارد. مشاهده پاسخ صحیح
پاسخ به سوال 
هادی اکبرزاده  5 سال پیش
+2 0

من این الگوریتمو به صورت زیر نوشتم:

 
 fun fibonacci(n: Int): Int {
    if (n == 0) {
        return 0;
    } else if (n == 1) {
        return 1;
    } else {
        return (fibonacci(n-1) + fibonacci(n-2));
    }
}
  • خونه اول که صفره (n = 0)
  • خونه دوم هم که یکه (n = 1)
  •  و اگه خونه دیگه رو بخواد، فیبونانچی دوتا خونه قبلیو جمع می‌کنیم که هربار به دو تا خونه قبل‌تر از خودش اشاره میکنه
پاسخ به سوال 
mmz_133  5 سال پیش
+1 0

 پاسخ صحیح

سلام دوست عزیز

برای نوشتن این الگوریتم لازم نیست که صفر و یک ورودی تابع باشه

فقط تعداد جمله دنباله رو به عنوان ورودی بگیرید

الگوریتمی که دوستمون هادی نوشتن درست کار میکنه ولی به جهت بازگشتی بودن و تکرار محاسبه فیبوناچی از نظر پیچیدگی زمانی اصلا منطقی نیست و وقتی عدد بزرگتر بشه به مشکل برمیخوره

من این رو پیشنهاد می کنم :

fun fib(n: Int): Int {
var fib = Array(n+1, {i->(0)})
if(n<2) return n
fib[0]=0
fib[1]=1
for (i in 2..n){
fib[i] = fib[i-1] + fib[i-2]
}
return fib[n]
}

 

البته به این صورت هم میشه نوشت

fun fib2(n: Int): Int {
if(n<=1) return n
var num1 = 0
var num2 = 1
var nextNum=0
for(i in 2..n){
nextNum = num1 + num2
num1 = num2
num2 = nextNum
}
return nextNum
}
+2 0
این شکل آرایه رو تو سایت kotlinlang.org دیدم -> Array() با توابع لاندا کار میکنه (5 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .