简体   繁体   English

有人可以解释我如何将 for 循环转换为递归

[英]Can someone explain how can i transform for loop to recursion

can someone explan here how can i transform this for loop to recursion.有人可以在这里解释我如何将这个 for 循环转换为递归。 Thank you so much in advance.非常感谢你。

//FibonacciNumbers_v1
#include <stdio.h>
#define LIMIT 10
main() {
showFibonacciValues();
}
showFibonacciValues() {
int n;
long fn;
long fn1 = 1;
long fn2 = 0;
double q;
    for(n = 2; n <= LIMIT; ++n) {
    fn = fn1 + fn2;
    q = (double) fn / fn1;
    fn2 = fn1;
    fn1 = fn;
    printf("%7ld%19ld%29.16f\n", n, fn, q);
    }
}

You can do it this way:你可以这样做:

#include <stdio.h>

int factorial(int n) {
   //base case
   if(n == 0) {
      return 1;
   } else {
      return n * factorial(n-1);
   }
}

int fibbonacci(int n) {
   if(n == 0){
      return 0;
   } else if(n == 1) {
      return 1;
   } else {
      return (fibbonacci(n-1) + fibbonacci(n-2));
   }
}

int main() {
   int n = 5;
   int i;
    
   printf("Factorial of %d: %d\n" , n , factorial(n));
   printf("Fibbonacci of %d: " , n);
    
   for(i = 0;i<n;i++) {
      printf("%d ",fibbonacci(i));            
   }
}

For recursive you can write that:对于递归,您可以这样写:

//FibonacciNumbers_v1
#include <stdio.h>
#define LIMIT 10
int main() {
    showFibonacciValues(2,0,1,0,0);
    return 0;
}
showFibonacciValues(int val, long fn, long fn1,long fn2,double q) {

    fn = fn1 + fn2;
    q = (double) fn / fn1;
    fn2 = fn1;
    fn1 = fn;
    printf("%7ld%19ld%29.16f\n\n", val, fn,q);
    
    if(val < LIMIT) {
        showFibonacciValues(++val,fn,fn1,fn2,q);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM